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

问题描述

我试图围绕java8流,想知道是否有人可以帮助我。

在旧的Java中,

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

基本上,我想过滤空对象并将其记录下来。 在Java 8中执行此操作的好方法是什么?

解决方法

我建议将该逻辑移至其他方法

unchanged %>% filter(species == "CELgra") %>%  ggplot( aes(x = range_point,y = ABV)) +
  geom_boxplot() +
  xlab(NULL)+
  ylab("Total Aboveground Biomass (mg)") +
  theme_bw() 

然后只需流式传输列表

public boolean filter(Object obj) {

  if(obj == null){
      logger.error("null object");
      return false;
    }
  return true;
}
,

您可以使用peek并将if语句放入其中:

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

但是这种丢失了流的简洁性,所以我个人仍然会使用普通的for循环来实现诸如“过滤null和收集到列表”之类的简单操作。

请记住,流不要代替循环。不要仅仅因为流是新的而使用流。