我有以下代码:
myList.getJumps().stream()
.map(step -> step.getJump().getValue())
.flatMap(List::stream)
.collect(Collectors.toList());
step.getJump()
有可能是null
。
有没有一种有效的方法可以避免出现NPE?
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());
正如@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方法中调用此方法