Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 基于类数据成员对ArrayList进行排序';s数据成员_Java_Sorting_Arraylist - Fatal编程技术网

Java 基于类数据成员对ArrayList进行排序';s数据成员

Java 基于类数据成员对ArrayList进行排序';s数据成员,java,sorting,arraylist,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;

因此,我有一个类,它包含另一个类对象作为它的数据成员。我已经基于这个原型创建了一个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);

       }
   }
包栈;
导入java.io.*;
导入java.util.*;
类点
{
int x;
int-y;
点(整数x,整数y)
{
这个.x=x;
这个。y=y;
}
}
公共类合并间隔
{
P点;
MergeInterval(){}
公共静态void main(字符串参数[])
{
ArrayList arr=新的ArrayList();
//点p=新点(6,8);
arr.add(新的第(6,8)点);
arr.add(新的第(1,9)点);
arr.add(新的第(2,4)点);
arr.add(新的第(4,7)点);
//System.out.println(arr.get(1.x+“”+arr.get(1.y));
}
}
我需要将此Arraylist排序为,以获得如下输出: {1,9}{2,4}{4,7}{6,8}

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

采用a,它决定了为了确定顺序,应如何将列表中的元素相互比较。您可以自己实现
Comparator
来指定通过比较
点的
x
值来比较
点,这需要几行代码,也可以使用内置的
比较器之一

Comparator
接口为您希望通过列表元素的简单函数进行比较的情况定义了默认实现

由于您正在对
int
属性进行比较,因此可以使用以下方法:

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

一种方法是,如果您的Point类实现Comparable。像排序这样的过程需要进行某种比较。请看看这个

在这种情况下,Point类将实现Comparable。为此,Point类还需要一个compareTo(Point other)方法。在您的例子中,如果this.x==other.x,此函数将返回0;如果this.x
这是否回答了您的问题?

创建一个比较器,如下所示:

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

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

arr.sort(comparator);
比较器比较器=新比较器(){ @凌驾 公共整数比较(点o1,点o2){ 返回整数。比较(o1.x,o2.x); } }; arr.sort(比较器);

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

为什么
需要具有可比性?OP希望按
x
值对它们进行排序,该值是一个int。这不是需要排序的点对象的数组列表吗?是的,但需要一个
比较器。没有必要将
设置为
可比
。是的,我只是提供了一个替代解决方案,更好地解释这个概念,因为OP似乎不知道可比性。很明显,你的答案是一个更圆滑的解决方案。所以说吧。你的答案充满了不真实的陈述:“你的Point类需要具有可比性”:它不“需要”做任何类似的事情。这很有帮助。谢谢它是有效的,但它有点老套,比它可能的更冗长。在Java8中,通常使用
比较器进行排序的惯用法是将lambda表达式传递给方法。匿名内部类非常非常。。。爪哇5。