有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何在Java8流中过滤和记录空对象

我正试图了解java8流,想知道是否有人能帮我解决这个问题

在旧爪哇

List<Obj> newObjs = ArrayList<Obj>();
for (Obj obj : objects){
  if(obj == null){
     logger.error("null object");
  }
  else{
    newObjs.add(...)
  }
}

基本上,我想过滤空对象并记录它。 在Java8中,什么是实现这一点的好方法


共 (2) 个答案

  1. # 1 楼答案

    您可以使用^{}并在其中放入一个if语句:

    List<Obj> newObjs = objects.stream().peek(x -> {
        if (x == null) logger.error("null object");
    }).filter(Objects::nonNull).collect(Collectors.toList());
    

    但这种方式会失去流的简洁性,所以我个人仍然会使用一个普通的for循环来实现一些简单的事情,比如“过滤空值并收集到列表”

    请记住,流不会替换for循环。不要仅仅因为流是新的和闪亮的就使用它

  2. # 2 楼答案

    我建议将这种逻辑转换成不同的方法

    public boolean filter(Object obj) {
    
      if(obj == null){
          logger.error("null object");
          return false;
        }
      return true;
    }
    

    然后流式处理列表

    objects.stream().filter(this::filter).collect(Collectors.toList());