如何将其转换为 Java 8 lambda 表达式?
List<String> inputStrings = new ArrayList<>(); // say, a list of inputStrings
ArrayList<SomeClass> outputResultStrings = new ArrayList();
for(String anInputString : inputStrings) {
SomeClass someResult = doSomthing(anInputString);
if (someResult != null) {
outputResultStrings.add(someResult);
}
}
最佳答案
您的代码基本上遍历输入字符串,对每个字符串执行 doSomthing
(Java 术语中的 map
),忽略 null
的结果(Java 术语中的 filter
),然后生成这些结果的列表(Java 术语中的 collect
)。当你把它们放在一起时:
List<SomeClass> outputResultStrings =
inputStrings.stream()
.map(SomeClass::doSomething)
.filter(x -> x != null)
.collect(Collectors.toList());
编辑:
正如 Tunaki 所建议的,可以使用 Objects::nonNull
清除非空检查:
List<SomeClass> outputResultStrings =
inputStrings.stream()
.map(SomeClass::doSomething)
.filter(Objects::nonNull)
.collect(Collectors.toList());
关于java - 如何转换有时将转换后的值添加到 Java 8 流/lambda 的循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34824714/