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

标签 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);
    }
}

最佳答案

您的代码基本上遍历输入字符串,对每个字符串执行 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/

相关文章:

java - JFrame多种样式

java - 用单个对象的克隆填充数组

C++ std::priority_queue 使用 lambda 表达式

java - 使用udp发送实时语音

java - 如何在 hibernate 中根据 id 更新行

java - 检查是否全部为真并使用 Java 8 的单行 lambda 表达式重置 boolean [] 数组

c# 多表达式参数

java - 为什么 Stream::flatMap 的这种用法是错误的?

对象数组的Java Stream Reduce

Java 8 流已被操作或关闭