Java 8嵌套流:在最后一个流中返回一个值

Dapangma :

这个问题可以认为是基于Java 8的嵌套流

假设我有一个Batch带有Baskets的Items:

public class Batch {
    private List<Basket> baskets;
}

public class Basket {
    private List<Item> items; 
}

public class Item {
    private String property;
    private int value;
}

我想用Java 8流重写此方法。

public class SomeService {
    public int findValueInBatch(Batch batch) {
        for (Basket basket : batch.getBaskets()) {
            for (Item item : basket.getItems()) {
                if (item.getProperty().equals("someValue") {
                    return item.getValue();
                }
            }
        }
        return 0;
    }
}

我该怎么办?

我要去的第一步:

public int findValueInBatch(Batch batch) {
    for (Basket basket : batch.getBaskets()) {
        basket.getItems().stream()
            .filter(item -> item.getProperty.equals("someValue") 
            .findFirst()
            .get();
            // there I should 'break'
    }
}

非常感谢。

阿夫尼特·保罗(Avneet Paul):
baskets.stream()
            .flatMap(basket -> basket.getItems().stream())
            .filter(item -> item.equals("someValue"))
            .findAny()
            .orElseThrow(NoSuchElementException::new);

使用findAny代替的优点findFirstfindFirst不适用于并行流。因此,如果要并行执行上述操作,则只需将stream()方法替换为parallel()

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Java 8根据最后一个值生成整数流

返回Java 8流中的第一个匹配项(类似于_.find)

向流中添加两个Java 8流或一个额外的元素

Java的8流 - 在一个类从流求和多个值

使用Java8流从List <Obj>中查找一个值的总计

Java流查找匹配或最后一个?

当一个Java 8个流认为是消费?

重写双嵌套for循环作为一个Java 8流

Java的8个流功能分组到地图,其中的值是一个地图

Java的8一个流多地图

Java 8流分组通过:求和一个attributeValue

Java 8流分组 如果只有一个分组值对象,如何设置字段?

如何使用Java 8流获得每个不同键的第一个值?

在Java 8中从第一个流到下一个流api访问对象引用

折叠Java中的一个连续的流

如何在Java中创建一个空流?

Java流中的foreach LAMBDA使用一个元素

在映射中创建值流,这些流是Java中另一个映射中的值

是否有可能用Java中的2个流制作一个新的流?

将映射器流应用于Java8中的另一个流

如何在Java 8流中执行条件操作以跳过下一个流操作?

如何从forEach循环一个输出列表中的Java 8流

是否有一个eqivalent在Java中8+流断了?

为什么在Java 8中String.chars()是一个整数流?

Java 8流如何过滤在另一个arrayList中找不到的List的内容?

在一个 java 流 lambda 函数中求和不同的值

如何清除列表,它是使用Java 8个流一个HashMap值里面的内容

有没有办法在一个Java8流中读取两个或更多文件?

重构一个复杂而循环到Java 8个流