我有一个 Java 集合:
Collection<CustomObject> list = new ArrayList<CustomObject>();
CustomObject
在显示列表之前有一个 id
字段 我想按那个 id
对这个集合进行排序。
有什么办法可以做到吗?
原文由 Makky 发布,翻译遵循 CC BY-SA 4.0 许可协议
我有一个 Java 集合:
Collection<CustomObject> list = new ArrayList<CustomObject>();
CustomObject
在显示列表之前有一个 id
字段 我想按那个 id
对这个集合进行排序。
有什么办法可以做到吗?
原文由 Makky 发布,翻译遵循 CC BY-SA 4.0 许可协议
问题是:“排序集合”。所以你不能使用 Collections.sort(List<T> l, Comparator<? super T> comparator)
。
一些技巧:
对于集合类型:
Comparator<String> defaultComparator = new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o1.compareTo(o2);
}
};
Collection<String> collection = getSomeStringCollection();
String[] strings = collection.toArray(new String[collection.size()]);
Arrays.sort(strings, defaultComparator);
List<String> sortedStrings = Arrays.asList(strings);
Collection<String> collection = getSomeStringCollection();
List<String> list = new ArrayList(collection);
Collections.sort(list, defaultComparator);
collection = list; // if you wish
对于列表类型:
List<String> list = getSomeStringList();
Collections.sort(list, defaultComparator);
对于集合类型:
Set<String> set = getSomeStringSet();
// Than steps like in 'For Collection type' section or use java.util.TreeSet
// TreeSet sample:
// Sorted using java.lang.Comparable.
Set<String> naturalSorted = new TreeSet(set);
Set<String> set = getSomeStringSet();
Set<String> sortedSet = new TreeSet(defaultComparator);
sortedSet.addAll(set);
Java 8 版本。有 java.util.List#sort(Comparator<? super E> c)
方法
List<String> list = getSomeStringList();
list.sort(defaultComparator);
或者
List<String> list = getSomeStringList();
list.sort((String o1, String o2) -> o1.compareTo(o2));
或者对于实现 Comparable 的类型:
List<String> list = getSomeStringList();
list.sort(String::compareTo);
原文由 Aliaksei Yatsau 发布,翻译遵循 CC BY-SA 3.0 许可协议
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
3 回答1.7k 阅读✓ 已解决
使用 比较器:
此外,如果
CustomObject
实施Comparable
,则只需使用Collections.sort(list)
使用 JDK 8 语法更简单。
更简单
最简单的
显然初始代码也可以用于 JDK 8。