在Java 8中使用Lambda对ArrayList进行排序

Jee*_*eef 39 java lambda functional-programming java-8

有人能告诉我一个快速的例子,说明如何ArrayList使用新的lambda语法在Java 8中按字母顺序排序.

小智 58

对于字符串,这将起作用

arrayList.sort((p1, p2) -> p1.compareTo(p2));
Run Code Online (Sandbox Code Playgroud)

  • 更好:arrayList.sort(String :: compareTo) (34认同)
  • 请注意,`.sort(String :: compareTo)和.sort(Comparator.naturalOrder())`将在任何小写字母之前对所有**大写字母进行排序.通常你想要的是`.sort(String :: compareToIgnoreCase)` (21认同)
  • 更好的是:[`arrayList.sort(Comparator.naturalOrder())`](http://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html#naturalOrder--) (18认同)

Lou*_*man 27

你只是在排序String吗?如果是这样,你不需要lambdas; 毫无意义.你这样做

import static java.util.Comparator.*;

list.sort(naturalOrder());
Run Code Online (Sandbox Code Playgroud)

...虽然如果你用一个String字段对对象进行排序,那么它会更有意义:

list.sort(comparing(Foo::getString));
Run Code Online (Sandbox Code Playgroud)


Sai*_*eek 6

假设您有要按字母顺序排序的名称列表(字符串)。

List<String> result = names.stream().sorted(
                 Comparator.comparing(n->n.toString())).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

它的工作完美。


UTF*_*ath 5

使用 list.sort(String::compareToIgnoreCase)

使用list.sort(String::compareTo)list.sort(Comparator.naturalOrder())将给出错误的(即非字母)结果。它将排序任何之前大写字母全部小写字母,所以该阵列["aAAA","Zzz", "zzz"]被分拣到["Zzz", "aAAA", "zzz"]