java-8 - Java8 : Filter and map on same method output

标签 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()在这里被调用两次。有什么办法吗?

最佳答案

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

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

关于java-8 - Java8 : Filter and map on same method output,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39122781/

相关文章:

lambda - 如何在 lambda 过滤器中使用多个声明?

java - Log4j线程名称混淆

java - 如何按 Java 列表中对象的属性进行分组?

java - java.util.Collection 为什么不实现新的 Stream 接口(interface)?

java - 过滤后无法返回子类对象的Stream

java - 如何在 Java 8 中单行处理列表元素到另一个列表

java - 更新android studio 3.0.0时找不到错误:java. lang.ClassNotFoundException : Class org. openjdk.jdi.ReferenceType

java - 来自 YearMonth 的 LocalDate 和第 n 个 DayOfWeek

java - 如何使用流替换两个循环并保留列表中相同的元素

java - 如何交错Java 8 Stream?类似于 Collectors.joining() 但对于字符串以外的东西