基于 Object 属性的 Java 8 流文件管理器

我正在尝试使用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));

这给了我列表中所有元素的总和,并且所有键都正确。但是我尝试过滤并仅在类型代码大于10时才获取总和。

任何人都可以建议如何使用typeCode过滤上述流吗?


慕田峪9158850
浏览 102回答 1
1回答

holdtom

你可以只使用&nbsp;Stream.filter()&nbsp;方法:BigDecimal&nbsp;previousAmt&nbsp;=&nbsp;map.values().stream().flatMap(List::stream) &nbsp;&nbsp;&nbsp;&nbsp;.filter(i&nbsp;->&nbsp;i.getTypeCode()&nbsp;>&nbsp;10)&nbsp;//&nbsp;filters&nbsp;the&nbsp;stream &nbsp;&nbsp;&nbsp;&nbsp;.map(MyObject::getPreviousAmount) &nbsp;&nbsp;&nbsp;&nbsp;.reduce(BigDecimal.ZERO,&nbsp;BigDecimal::add);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java