基于类数据成员的数据成员对ArrayList进行排序

时间:2016-01-24 03:35:18

标签: java sorting 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'方法。我如何实现它?

3 个答案:

答案 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);

您可以在填充列表后添加此代码。