排序 Java 集合

新手上路,请多包涵

我有一个 Java 集合:

 Collection<CustomObject> list = new ArrayList<CustomObject>();

CustomObject 在显示列表之前有一个 id 字段 我想按那个 id 对这个集合进行排序。

有什么办法可以做到吗?

原文由 Makky 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 427
2 个回答

使用 比较器

 List<CustomObject> list = new ArrayList<CustomObject>();
Comparator<CustomObject> comparator = new Comparator<CustomObject>() {
    @Override
    public int compare(CustomObject left, CustomObject right) {
        return left.getId() - right.getId(); // use your logic
    }
};

Collections.sort(list, comparator); // use the comparator as much as u want
System.out.println(list);

此外,如果 CustomObject 实施 Comparable ,则只需使用 Collections.sort(list)

使用 JDK 8 语法更简单。

 List<CustomObject> list = getCustomObjectList();
Collections.sort(list, (left, right) -> left.getId() - right.getId());
System.out.println(list);

更简单

List<CustomObject> list = getCustomObjectList();
list.sort((left, right) -> left.getId() - right.getId());
System.out.println(list);

最简单的

List<CustomObject> list = getCustomObjectList();
list.sort(Comparator.comparing(CustomObject::getId));
System.out.println(list);

显然初始代码也可以用于 JDK 8。

原文由 Kowser 发布,翻译遵循 CC BY-SA 3.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 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题