java - 使用 java 8 流处理空属性并使用 lambda 表达式进行排序

标签 java nullpointerexception java-8

让我们考虑一个 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/

相关文章:

JAVA8 : convert list of raw data to map of key and list of calculated values

java - 如何在 Linux 中签署 Mac OS X 应用程序?

java - 如何在java中减去hashmap数据

java - Android 应用程序在启动时因空指针异常而崩溃

java - 我尝试编写一个程序,但控制台仍然显示 "Exception in thread "main"java.lang.NullPointerException",我不知道出了什么问题

Java8 列表返回元素或 null

java - 使用 Java 8 执行计时方法

java.lang.ArrayIndexOutOfBoundsException : size=2048 offset=0 byteCount=-1

java - 当我尝试重新定义变量时,出现索引越界错误

android - Andengine动态壁纸中的空指针异常