不确定lambda表达式和排序的新语法。
itemStream.parallel().filter(Objects::nonNull).forEach(
(item) -> randomMethod(item));
我之前在for循环中所执行的操作是先检查null,然后如果遇到null项目,则发出警告
log.warn("Skipping a null item!");
使用基于流的方法如何记录它遇到空对象(同时仍在过滤)的情况?
答案 0 :(得分:7)
您可以使用Stream::peek
:
itemStream.parallel()
.peek(item -> { if (item == null) log.warn("Skipping a null item!"); })
.filter(Objects::nonNull)
.forEach(item -> randomMethod(item));
您还可以对randomMethod
使用方法引用(这里我假设它是this
的成员):
itemStream.parallel()
.peek(item -> { if (item == null) log.warn("Skipping a null item!"); })
.filter(Objects::nonNull)
.forEach(this::randomMethod);
答案 1 :(得分:1)
使用.filter(Objects::nonNull)
,您将过滤掉所有null
元素,并且仅保留非null元素,这意味着在forEach
中,您将不会收到任何null元素,不必担心日志记录它。相反,您想要:
itemStream.parallel()
.forEach(item -> {
if(Objects.isNull(item)) { ... } else { ... }; // or if(item == null) ...
});
答案 2 :(得分:1)
过滤null
个项目后,您将找不到它们!
只需使用此:
itemStream.parallel().forEach((item)-> {
if(item==null)
log.warn("Skipping a null item!");
else
randomMethod(item)
});