簡體   English   中英

如何過濾記錄Java 8個流中的null個對象

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM