3 回答

TA貢獻(xiàn)1794條經(jīng)驗(yàn) 獲得超7個(gè)贊
使用比較器:
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 wantSystem.out.println(list);
另外,如果CustomObject
實(shí)現(xiàn)Comparable
,那么只需使用Collections.sort(list)
使用JDK 8,語(yǔ)法更簡(jiǎn)單。
List<CustomObject> list = getCustomObjectList();Collections.sort(list, (left, right) -> left.getId() - right.getId());System.out.println(list);
更簡(jiǎn)單
List<CustomObject> list = getCustomObjectList();list.sort((left, right) -> left.getId() - right.getId());System.out.println(list);
簡(jiǎn)單
List<CustomObject> list = getCustomObjectList();list.sort(Comparator.comparing(CustomObject::getId));System.out.println(list);
顯然,初始代碼也可以用于JDK 8。

TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超6個(gè)贊
問(wèn)題是:“排序集合”。所以你不能使用Collections.sort(List<T> l, Comparator<? super T> comparator)
。
一些技巧:
對(duì)于收集類(lèi)型:
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
對(duì)于列表類(lèi)型:
List<String> list = getSomeStringList();Collections.sort(list, defaultComparator);
對(duì)于Set類(lèi)型:
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));
或者對(duì)于實(shí)現(xiàn)Comparable的類(lèi)型:
List<String> list = getSomeStringList();list.sort(String::compareTo);

TA貢獻(xiàn)1712條經(jīng)驗(yàn) 獲得超3個(gè)贊
一個(gè)稍微不同的例子說(shuō),如果你有一個(gè)類(lèi)沒(méi)有實(shí)現(xiàn)Comparable但你仍然想要在一個(gè)字段或方法上對(duì)它進(jìn)行排序。
Collections.sort(allMatching, new Comparator<ClassOne>() { @Override public int compare(final ClassOne o1, final ClassOne o2) { if (o1.getMethodToSort() > o2.getMethodToSort()) { return 1; } else if (o1.getMethodToSort() < o2.getMethodToSort()) { return -1; } return 0; }});
添加回答
舉報(bào)