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

如何在流#map()[重复]中应用空检查

刘选
2023-03-14

我有以下代码:

 myList.getJumps().stream()
            .map(step -> step.getJump().getValue())
            .flatMap(List::stream)
            .collect(Collectors.toList());

step.getJump()有可能是null

有没有一种有效的方法可以避免出现NPE?

共有2个答案

郑琦
2023-03-14

explicate null check没有问题。如果我们在flatMap()操作中应用它,则会生成一个非空列表步骤。getJump()应该生成一个流,否则需要提供一个空流:

myList.getJumps().stream()
    .flatMap(step -> step.getJump() != null ?
        jump.getValue().stream() : Stream.empty())
    .collect(Collectors.toList());

从Java 9开始,我们可以利用流。of nullable()创建单例流或空流:

myList.getJumps().stream()
    .flatMap(step -> Stream.ofNullable(step.getJump())
        .flatMap(jump -> jump.getValue().stream())
    .collect(Collectors.toList());
高森
2023-03-14

正如@HariHaravelan在评论中提到的:

myList.getJumps().stream()
            .filter(step-> step.getJump()! = null)
            .map(step -> step.getJump().getValue())
            .flatMap(List::stream)
            .collect(Collectors.toList());

甚至:

myList.getJumps().stream()
                .filter(step-> Objects.nonNull(step.getJump())
                .map(step -> step.getJump().getValue())
                .flatMap(List::stream)
                .collect(Collectors.toList());
 类似资料:
  • 我有一组从共享类型继承的域对象(即、)。子类型具有特定的属性(即、)。 此外,作为解析日志文件的结果,我有一个包含混合子类型的记录列表。 为了计算日志记录上的统计信息,我想只在匹配特定子类型的记录子集上应用数学函数,即只在s上应用数学函数。因此,我希望有一个特定子类型的过滤流。我知道可以使用以下方法将和应用到子类型 在流上多次应用这个filter&cast(特别是在对同一子类型进行多次不同计算时)

  • 我的想法是: 是最好的办法吗?

  • 在Java,有没有一种方法可以避免在调用的每个级别上嵌套null检查,以确保沿途没有阻止下一次调用的null。有没有一个优雅的方法来做这件事? 例如: Objone.ObjTwo.ObjTree.ObjFour.ObjF

  • 我不断遇到需要通过映射或集合保存状态的解决方案。e、 g.创建一个返回在输入中找到的重复项的方法 我的Java8流解决方案,不幸的是,我正在使用哈希集进行过滤。我理解这并不“恰当”,因为这取决于州。没有州是建议还是硬性规定?这只是运行并行流时的问题吗?有人能推荐一种不使用哈希集的方法吗?

  • 我下面有这些代码,如何检查是否为空? 如果我将,它显示此[] 如何检查数组是否为空,然后显示消息“This is empty”? 我试过了,但效果不好。即使它大于或小于0,也将始终显示“2”

  • 如何在main方法中调用此方法