让我们考虑一个 Parent
仅包含一个 Integer
的类属性。我创建了 6 个父类对象,属性值是 100, 20, 300, 400, 500, null
.
现在我将所有对象添加到列表中(列表名称为列表)。那么我想获取属性值大于100
的对象.为此,我使用了 Java 8 流。
Predicate<Entity> predicate = e -> e.getParentId() < 100;
result = list.stream().filter(predicate).collect(Collectors.toList());
我还想按降序对列表进行排序。为此,我使用了以下代码。
Comparator<Entity> comp = (d1,d2) -> d2.getId().compareTo(d1.getId());
list.sort(comp);
在这两种情况下,我都会收到
NullPointerException
.如何处理?
最佳答案
这里的所有答案都围绕着“丢弃坏元素,即那些具有空值 getParentId()
的元素”。如果它们确实很糟糕,那可能就是答案。但还有另一种选择:Comparators.nullsFirst
(或最后。)这允许您比较将空值视为小于(或大于)所有非空值的事物,因此您不必丢弃具有空 parentId 的元素。
Comparator<Entity> cmp = nullsLast(comparing(Entity::getParentId));
List<Entity> list = list.stream().sorted(cmp).collect(toList());
您可以为过滤做类似的事情;将谓词定义为:
Predicate<Entity> predicate = e -> e.getParentId() != null
&& e.getParentId() < 100;
关于java - 使用 java 8 流处理空属性并使用 lambda 表达式进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31284282/