当前位置: 首页 > 知识库问答 >
问题:

使用Java8流处理空属性和使用lambda表达式排序

岳正浩
2023-03-14

让我们考虑一个类,它只包含一个integer属性。我创建了6个父类对象,属性值为100、20、300、400、500、null

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

这个怎么处理?

共有1个答案

柯阳曦
2023-03-14

这里的所有答案都围绕着“抛出坏元素,那些具有空getParentId()的元素。”这也许是答案,如果它们确实很糟糕的话。但还有另一种选择:comparators.nullsfirst(或last.)这允许您比较将null值视为小于(或大于)所有非null值的东西,因此您不必丢弃带有null 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;
 类似资料:
  • 既然我有一个带有两个方法的,那么我如何用一个具体的类实现它呢?如何为这两种方法编写Lambda表达式?

  • 这是我的清单: 我想按对列表进行排序,如果相等,则按排序,如果相等,则按排序。但是到目前为止,我只能使用Lambda表达式按一个属性排序: 如果我尝试 事实证明是错误的。。。

  • 问题内容: 这是我的清单: 我想按列表排序,如果等于则按,如果等于则按。但是到目前为止,我只能使用Lambda表达式按一个属性排序: 如果我尝试 原来是错误的… 问题答案: 将lambda 表达式 更改为lambda {block} ,而不必指定参数类型:

  • 我最近接触了Java8,我正在尝试学习Lambda表达式。我想做一些图形计算,我的代码到目前为止: 所有这些代码都是用于图形的,除了和使用的操作之外,所有内容都是基本的数学(加、减、乘、模),并且可以单独针对每个像素执行。 现在的问题是:有可能在GPU上运行这个吗?或者这甚至是自动基于GPU的?(我记得在什么地方读到过这个,但我不确定)

  • 我对lambda表达有意见。我的代码: 有可能吗?我只能使用java.util.function。我尝试从“lambda”中删除try catch,而我“main”方法应该正在捕获异常。

  • 本文向大家介绍Java8中Lambda表达式使用和Stream API详解,包括了Java8中Lambda表达式使用和Stream API详解的使用技巧和注意事项,需要的朋友参考一下 前言 Java8 的新特性:Lambda表达式、强大的 Stream API、全新时间日期 API、ConcurrentHashMap、MetaSpace。总得来说,Java8 的新特性使 Java 的运行速度更快、