有人可以向我演示如何使用新的lambda语法在Java 8中按字母顺序对ArrayList
进行排序。在Java 8中使用Lambda排序ArrayList
回答
对于字符串这样的工作
arrayList.sort((p1, p2) -> p1.compareTo(p2));
更好:arrayList.sort(String :: compareTo) –
更好:['arrayList.sort(Comparator.naturalOrder())'](http://docs.oracle.com/javase/8/docs/api/java /util/Comparator.html#naturalOrder--) – Holger
请注意,'.sort(String :: compareTo)和.sort(Comparator.naturalOrder())'将在任何小写字母之前对所有**大写字母进行排序。通常你想要的是'.sort(String :: compareToIgnoreCase)' –
你只是排序String
s?如果是这样,你不需要lambdas;毫无意义。你只是做
import static java.util.Comparator.*;
list.sort(naturalOrder());
...但如果你与String
字段排序对象,那么它使得有些更有意义:
list.sort(comparing(Foo::getString));
在函数式编程,你不使用旧的对象以对它们进行操作,但创建以这样的方式在新的一个:
list.stream().sorted().map(blah-blah).filter(...)...
使用list.sort(String::compareToIgnoreCase)
使用list.sort(String::compareTo)
或list.sort(Comparator.naturalOrder())
将给予不正确的(即。非字母)结果。它将之前排序任何大写字母所有小写字母,所以该阵列["aAAA","Zzz", "zzz"]
被分拣到["Zzz", "aAAA", "zzz"]
假如你有一个你想按字母顺序排序的名称(字符串)列表。
List<String> result = names.stream().sorted(
Comparator.comparing(n->n.toString())).collect(Collectors.toList());
其工作完美。
'Comparator'完全不需要。 – River
一个非常通用的解决方案。将介绍一些StreamUtil
像
public class StreamUtil {
private StreamUtil() {
}
@SuppressWarnings({ "rawtypes", "unchecked" })
public static <TYPE> Comparator<TYPE> sort(Function<TYPE, ? extends Comparable> getterFunction, boolean descending) {
if (descending) {
return (o1, o2) -> getterFunction.apply(o2).compareTo(getterFunction.apply(o1));
}
return (o1, o2) -> getterFunction.apply(o1).compareTo(getterFunction.apply(o2));
}
}
调用看起来像
list.stream().sorted(sort(YourClass::getSortProperty, true));
- 1. 使用Collections.sort对Java 8中的ArrayList排序
- 2. 在Java中对ArrayList排序
- 3. Java 8 Lambda - 过滤器2 ArrayList
- 4. 使用Java中的ArrayList中的内容对ArrayList排序
- 5. 排序的ArrayList中的Java
- 6. java中的ArrayList排序
- 7. 排序ArrayList - IndexOutOfBoundsException -Java
- 8. 快速排序使用arraylist java
- 9. 在Java中对ArrayList进行排序
- 10. 如何在java中对arraylist排序
- 11. 在Java中排序对象的ArrayList
- 12. 在JAVA中作者循环ArrayList排序
- 13. 在Java ArrayList中排序名称?
- 14. 在arraylist中排序
- 15. 使用Java 8进行线程排序
- 16. 在Java中使用Lambda返回Arraylist中的元素的位置
- 17. 错误使用lambda排序
- 18. java - ArrayList - 合并排序
- 19. Java ArrayList集合排序
- 20. Java排序ArrayList <Integer>
- 21. Java 8 lambda弱引用
- 22. 使用Collection排序ArrayList
- 23. 使用Lambda的Java 8滤镜阵列
- 24. java 8 lambda - 多次使用流
- 25. Java 8使用Lambda/Method参考动态
- 26. 选择排序使用ArrayList
- 27. 在Java中按值排序Hashmap 8
- 28. Java 8 Lambda超载
- 29. Java 8 lambda聚合
- 30. 在Java中使用流畅的链接排序集合8
我建议你阅读本:http://docs.oracle.com /javase/tutorial/java/javaOO/lambdaexpressions.html –