[英]How to filter and log null objects in Java 8 streams
我正在嘗試圍繞 java8 流進行思考,想知道是否有人可以幫助我。
在老java,
List<Obj> newObjs = ArrayList<Obj>();
for (Obj obj : objects){
if(obj == null){
logger.error("null object");
}
else{
newObjs.add(...)
}
}
基本上,我想過濾 null 個對象並記錄它。 在 java 8 中執行此操作的好方法是什么?
我建議將該邏輯轉移到不同的方法中
public boolean filter(Object obj) {
if(obj == null){
logger.error("null object");
return false;
}
return true;
}
然后就是 stream 列表
objects.stream().filter(this::filter).collect(Collectors.toList());
您可以使用peek
並在其中放置一個 if 語句:
List<Obj> newObjs = objects.stream().peek(x -> {
if (x == null) logger.error("null object");
}).filter(Objects::nonNull).collect(Collectors.toList());
但是這種失去了流的簡潔性,所以我個人仍然會使用一個普通的舊 for 循環來做一些簡單的事情,比如“過濾空值並收集到一個列表”。
請記住,Streams不會取代 for 循環。 不要僅僅因為它是新的和 shiny 就使用流。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.