gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 01:21:27 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com