Java8:在相同的方法输出上过滤和映射

时间:2016-08-24 12:01:59

标签: java-8 java-stream

我们正试图将下面的代码重构为java 8:

List<String> list = new ArrayList<>();
Iterator<Obj> i = x.iterator();
while (i.hasNext()) {
   String y = m(i.next().getKey());
   if (y != null) {
      list.add(y);
   }
}
return list;

到目前为止,我们已经提出:

return x.stream().filter(s -> m(s.getKey()) != null).map(t -> m(t.getKey())).collect(Collectors.toList());

但是方法m()在这里被调用了两次。有什么办法吗?

1 个答案:

答案 0 :(得分:13)

你可以在映射步骤后进行过滤:

x.stream().map(s -> m(s.getKey())).filter(Objects::nonNull).collect(Collectors.toList());