Ben*_*r93 -3 java sorting arraylist object comparable
我有一个对象的arraylist无法实现Comparator/Comparable接口.
对象有一个字段:'SequenceNumber',它是一个整数.我需要按照这个字段(从最低到最高)的顺序对arraylist进行排序,而不实现上面提到的接口.
有没有一种简单的方法可以做到这一点,我可以手动编写一个排序算法,但想知道是否有一个更有效(和更多无错误)的方式这样做,我在搜索时错过了?
注意:使用Java 7.
创建一个比较器类来处理排序:
private class MyObjectComparator<MyObject> implements Comparator<MyObject> {
/**
* {@inheritDoc}
*/
@Override
public int compare(MyObject o1, MyObject o2) {
return o2.getSequenceNumber() - o1.getSequenceNumber();
}
}
Run Code Online (Sandbox Code Playgroud)
然后ArrayList用它排序:
Collections.sort(myArrayList, new MyObjectComparator());
Run Code Online (Sandbox Code Playgroud)
小智 6
您可以使用 Java8 中引入的 lambda 表达式对对象进行排序,而无需实现 Comparable/Comparator 接口。
下面是使用 lambda 排序和显示对象的代码片段。
class Student
{
int id;
String name;
public Student(int id, String name)
{
this.id = id;
this.name = name;
}
public String toString()
{
return id +" " +name;
}
}
public class SortDemo
{
public static void main(String[] args)
{
List<Student> list=new ArrayList<Student>();
//Adding Objects
list.add(new Student(1,"XYZ"));
list.add(new Student(3,"ABC"));
list.add(new Student(2,"PQR"));
System.out.println("Sorting on the basis of name...");
// implementing lambda expression
Collections.sort(list,(p1,p2)->{return p1.name.compareTo(p2.name);});
list.forEach((s)->System.out.println(s));
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2622 次 |
| 最近记录: |