- 问题:直接排序的话会出现NullPointerException所以需要排空
- 解决:使用nullsFirst()或者/nullsLast()
- 方法介绍
- nullsFirst():此方法返回比较器,其是空型比较,并认为空值小于非空。null首先通过以下逻辑进行操作:
-
1.null元素被认为小于non-null(即值是null的小于非空的)。 2.当两个元素都为空时,则认为它们相等。 3.当两个元素都不为空时,指定的Comparator确定顺序。 4.如果指定的比较器为null,则返回的比较器将所有非null元素视为相等。 5.如果指定的比较器可序列化,则返回的比较器可序列化。
- nullsLast():方法返回比较器,其是空型比较,并认为比非空更大空值。null首先通过以下逻辑进行操作:
-
1.null元素被认为大于非null。 2.当两个元素都为空时,则认为它们相等。 3.当两个元素都不为空时,指定的Comparator确定顺序。 4.如果指定的比较器为null,则返回的比较器将所有非null元素视为相等。 5.如果指定的比较器可序列化,则返回的比较器可序列化。
- 示例:
-
List<Student> list = v.stream().distinct() .sorted(Comparator.comparing(Student::getAge, Comparator.nullsLast(String::compareTo)).reversed() .thenComparing(Student::getNo, Comparator.reverseOrder())) .collect(Collectors.toList());
- 补充说明
1.sorted():自然排序
list = list.stream().sorted().collect(Collectors.toList());
2.定制排序(根据某个字段排序)
list = list.stream().sorted(Comparator.comparing(Student::getAge))
.collect(Collectors.toList());
3.降序文章来源:https://www.toymoban.com/news/detail-834314.html
list = list.stream().sorted(Comparator.comparing(Student::getAge).reversed())
.collect(Collectors.toList());
4.多字段排序文章来源地址https://www.toymoban.com/news/detail-834314.html
list=list.sorted(Comparator.comparing(Student::getName).thenComparing(Student::getAge))
.collect(Collectors.toList());
到了这里,关于Java Stream流排序并判空的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!