我想问一个关于流的问题,我有一个class C
的列表,结构如下:
list<C> listC
class C {
Map<String, ClassB>
}
classB {
Map<String, ClassA>
}
classA {
int value;
}
int sumOfValues = ?
我的目标是了解获得所有值之和的最佳方法,即使用流迭代Map。
我知道如何使用普通循环或forEach结构来执行此操作,但我不完全确定如何通过流来最好地执行此操作。
我试过这样的方法:
listC.stream().map(C::getMap).collect(Collectors.toList()).stream()
.map(m -> m.values().stream().collect(Collectors.toList()))
但我不认为这是正确的道路...
有人能帮助我理解迭代Map结构列表的最佳方法吗?非常感谢
4条答案
按热度按时间enyaitl31#
在我看来,您正在寻找Stream.flatMap():
返回一个流,该流由将此流的每个元素替换为Map流的内容的结果组成,该Map流是通过将提供的Map函数应用于每个元素而生成的。
flatMap()操作的作用是将一对多转换应用于流的元素,然后将生成的元素扁平化为新的流。
示例:
efzxgjgh2#
你可以这样试试:
eufgjt7s3#
正如其他人所建议的,我们可以使用flatMap并以一种简单的方式解决这个问题。
最后两步的另一种写法似乎对初学者更有可读性
gblwokeq4#
以下是我的回答: