所以,我有一个包含另一个类对象作为其数据成员的类。我已经基于这个原型创建了一个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 :(得分:0)
List.sort(...)
method采用Comparator
确定列表中的元素应如何相互比较以确定订单。您可以自己实施Comparator
以指定应通过比较Point
值来比较x
,这需要几行代码,或者您可以使用其中一个内置代码Comparator
秒。
Comparator
接口定义了您希望通过list元素的简单函数进行比较的情况的默认实现。
由于您要对int
属性进行比较,因此可以使用Comparator.comparingInt
,如下所示:
arr.sort(Comparator.comparingInt(p -> p.x));
答案 1 :(得分:0)
执行此操作的一种方法是,如果您的Point类实现Comparable。像排序这样的过程需要进行某种比较。请查看此link。
在这种情况下,您的Point类将实现Comparable。为此,您的Point类还需要compareTo(Point other)方法。在你的情况下,如果this.x == other.x,则此函数将返回0,如果this.x&lt; other.x和1否则。
这会回答你的问题吗?
答案 2 :(得分: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);
您可以在填充列表后添加此代码。