2016-01-24 73 views
0

因此,我有一个包含另一个类对象作为其数据成员的类。我已经创建了一个基于这个原型的ArrayList。下面是代码:基于类数据成员的数据成员对ArrayList进行排序

package Stack; 

import java.io.*; 
import java.util.*; 


    class Point 
    { 
     int x; 
     int y; 

     Point(int x, int y) 
     { 
      this.x = x; 
      this.y = y; 
     } 
    } 

    public class MergeInterval 
    { 

     Point P; 

     MergeInterval() {} 


     public static void main(String args[]) 
     { 
      ArrayList<Point> arr = new ArrayList<Point>(); 
      // Point p = new Point(6,8); 

      arr.add(new Point(6,8)); 
      arr.add(new Point(1,9)); 
      arr.add(new Point(2,4)); 
      arr.add(new Point(4,7)); 

     // System.out.println(arr.get(1).x + " " + arr.get(1).y); 

     } 
    } 

我需要梳理此ArrayList才能得到输出如下: {1,9} {2,4} {4,7} {6,8}

基本上我需要基于Class'Point'的'x'变量对这个结构进行排序,但是使用内置的'sort'方法。我如何实现它?

回答

0

List.sort(...) method需要一个Comparator,它确定列表中的元素应该如何相互比较以确定顺序。您可以自己实施Comparator以指定Point需要比较它们的x值(需要几行代码),也可以使用其中一个内置Comparator s进行比较。

Comparator接口定义了默认实现,用于您希望通过某种简单函数进行比较的情况。

由于您是在int性能比较,你可以使用Comparator.comparingInt如下:

arr.sort(Comparator.comparingInt(p -> p.x)); 
+0

这有帮助。谢谢! –

0

的一种方式做到这一点,如果你点类实现可比会。像排序这样的过程需要进行某种比较。请看看这link

在这种情况下,您的Point类将实现Comparable。为了这个工作,你的Point类还需要一个compareTo(Point other)方法。在你的情况下,如果this.x == other.x,则此函数返回0,如果this.x < other.x则返回-1,否则返回1。

这是否回答你的问题?

+0

为什么'Point'需要具有可比性? OP想要用'x'值来排序,这是一个int值。 –

+0

它不是一个需要排序的Point对象的ArrayList吗? –

+0

是的,但是[“内置”'sort'方法](http://docs.oracle.com/javase/8/docs/api/java/util/List.html#sort-java.util.Comparator- )需要一个“比较器”。 “Point”不需要“可比”。 –

0

创建一个比较像这样:

Comparator<Point> comparator = new Comparator<Point>() { 

    @Override 
    public int compare(Point o1, Point o2) { 
     return Integer.compare(o1.x, o2.x); 
    } 
}; 

arr.sort(comparator); 

已填充列表后,您可以添加该代码。

+0

谢谢。有用! –

+0

它有效,但它有点老派,比它可能更冗长。在Java 8中,通常使用“Comparator”进行排序的习惯用法是将lambda表达式传递给方法。匿名内部类是如此,非常... Java 5。 – scottb

相关问题