复制
收藏
提问
简洁
java 对多个list排序,条件是list中的某一元素大小
4月前
全网
文档
学术
百科
知识库
回答简洁模式
深入研究一些
在Java中,对一个包含多个属性的对象列表进行排序通常涉及到Comparator
接口的使用。根据您提供的引用信息,我们可以总结出以下步骤来实现多属性排序:
-
定义对象类:首先,需要定义一个类(如
SortTest
),它包含了您想要排序的属性,例如a
、b
和c
。 -
实现Comparator接口:创建一个实现了
Comparator
接口的匿名类或者静态内部类,用于定义排序的逻辑。在这个例子中,我们需要先按属性a
倒序排列,再按属性b
倒序排列,最后按属性c
正序排列。 -
使用sort()方法:在列表上调用
sort()
方法,并传入刚才创建的Comparator
实例。
下面是一个具体的实现示例:
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
class SortTest {
String a;
int b;
int c;
public SortTest(String a, int b, int c) {
this.a = a;
this.b = b;
this.c = c;
}
// Getters and setters for a, b, and c if needed
}
public class Main {
public static void main(String[] args) {
List<SortTest> list = new ArrayList<>();
list.add(new SortTest("S1", 7, 3));
list.add(new SortTest("S2", 9, 5));
list.add(new SortTest("S3", 5, 7));
list.add(new SortTest("S4", 1, 5));
// 使用Collections.sort()方法进行排序
Collections.sort(list, new Comparator<SortTest>() {
@Override
public int compare(SortTest o1, SortTest o2) {
// 先按a倒序排列
int aCompare = -o2.a.compareTo(o1.a);
if (aCompare != 0) return aCompare;
// 再按b倒序排列
int bCompare = o2.b - o1.b;
if (bCompare != 0) return bCompare;
// 最后按c正序排列
return o1.c - o2.c;
}
});
// 输出排序后的列表
for (SortTest st : list) {
System.out.println(st.a + " " + st.b + " " + st.c);
}
}
}
在这个例子中,我们使用了Collections.sort()
方法来对列表进行排序,并通过实现Comparator
接口的匿名类来定义了排序的逻辑。注意,我们使用了-o2.a.compareTo(o1.a)
来实现a
属性的倒序排序,这是因为String
类的compareTo
方法默认是正序排序的。
这个例子符合您提供的引用信息中的描述,特别是1和2,它们描述了如何使用sort()
方法和Comparator
进行排序。同时,4和5也提供了关于Collections.sort()
方法和使用Stream
进行排序的额外信息。6和7提供了排序方法的概述,而8则展示了如何使用静态方法作为Comparator
进行排序。
你觉得结果怎么样?