英文:
How to filter elements which contains null references in java 8
问题
目前我正在努力理解Java 8。
我有这段流操作代码
List<MyObject> parsedEvents = events.stream()
.filter(Objects::nonNull)
.filter(e -> e.foo() != null && e.bar() != null && e.baz() != null)
.map(
e -> MyObject.builder()
.setFoo(e.foo())
.setBar(e.bar())
.setBaz(e.baz())
.build()
)
.collect(Collectors.toList());
但是,有时候 e.foo()
可能为null,或者 e.bar()
可能为null,或者 e.baz()
可能为null。
因此,我想只筛选那些其中任何一个方法将返回null的事件。
在Java 8中有什么简洁的方法可以实现这个?
英文:
So currently I am trying to wrap my head around java 8.
I have this stream manipulation
List<MyObject> parsedEvents = events.stream()
.filter(Objects::nonNull)
.map(
e -> MyObject.builder()
.setFoo(e.foo())
.setBar(e.bar())
.setBaz(e.baz())
.build()
).collect(Collectors.toList());
But, sometimes e.foo() can be Null or e.bar() can be null or e.baz() can be null.
So, I want to just filter those events where any of those methods will return a null.
What's a clean way to do that in java 8.
答案1
得分: 1
试一下这个。
List<MyObject> parsedEvents = events.stream()
.filter(Objects::nonNull)
.filter(e -> Stream.of(e.foo(), e.bar(), e.baz())
.allMatch(Objects::nonNull))
.map(
e -> MyObject.builder()
.setFoo(e.foo())
.setBar(e.bar())
.setBaz(e.baz())
.build())
.collect(Collectors.toList());
英文:
Try this.
List<MyObject> parsedEvents = events.stream()
.filter(Objects::nonNull)
.filter(e -> Stream.of(e.foo(), e.bar(), e.baz())
.allMatch(Objects::nonNull))
.map(
e -> MyObject.builder()
.setFoo(e.foo())
.setBar(e.bar())
.setBaz(e.baz())
.build())
.collect(Collectors.toList());
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论