【问题标题】:Java 8 Stream Filer based on Object property基于对象属性的 Java 8 流过滤器
【发布时间】:2019-03-16 21:27:51
【问题描述】:

我正在尝试使用 java 8 中的流从地图中获取所有值的总和。以下是我拥有的集合:

Map<BigDecimal, List<Object>> map = ...... //some elements in this map

假设对象具有以下属性:

BigDecimal previousAmount;
int typeCode;

我正在尝试获取所有键的列表中每个对象的所有 previousAmount 的总和。以下是我想出的:

BigDecimal previousAmt = map.values().stream().flatMap(List::stream)
            .map(Object::previousAmount).reduce(BigDecimal.ZERO, (a, b) -> a.add(b));

这给了我列表中所有元素的总和以及所有键的正确值。但我试图仅在 typeCode 大于 10 时过滤并获得总和。

谁能建议如何使用 typeCode 过滤上述流?

【问题讨论】:

    标签: java collections java-8 java-stream


    【解决方案1】:

    您可以只使用Stream.filter() 方法:

    BigDecimal previousAmt = map.values().stream().flatMap(List::stream)
        .filter(i -> i.getTypeCode() > 10) // filters the stream
        .map(MyObject::getPreviousAmount)
        .reduce(BigDecimal.ZERO, BigDecimal::add);
    

    【讨论】:

    • 感谢您的回复。 @SamuelPhilipp。有什么方法可以查看类型是否等于 10?而不是>10?如果我尝试按照上面所说的那样做,我会收到一个错误:(
    • 错误是什么?当然你可以改变条件,只需更换它!
    • 我的错。它的工作对不起。只是语法错误,这个链接:mkyong.com/java8/java-8-streams-filter-examples 帮助了我。非常感谢您的回复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-20
    • 2018-08-17
    • 1970-01-01
    • 1970-01-01
    • 2021-03-13
    • 2020-05-17
    相关资源
    最近更新 更多