如何转换有时将转换后的值添加到Java 8流/ lambda的循环?

ike*_*8me 4 java lambda java-8 java-stream

你如何将其转换为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);
    }
}
Run Code Online (Sandbox Code Playgroud)

Mur*_*nik 7

您的代码基本上是循环通过输入串,执行doSomthing对他们每个人的(map在Java中的术语),将忽略的结果null(filter在Java中的术语),然后产生这些结果的列表(collect在Java中的术语).当你把它们放在一起时:

List<SomeClass> outputResultStrings = 
    inputStrings.stream()
                .map(SomeClass::doSomething)
                .filter(x -> x != null)
                .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

编辑:
根据Tunaki的建议,可以使用以下方法清除非空检查Objects::nonNull:

List<SomeClass> outputResultStrings = 
    inputStrings.stream()
                .map(SomeClass::doSomething)
                .filter(Objects::nonNull)
                .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)