Java Stream。提取多个映射的不同值
问题描述:
我想提取并计算映射值中不同元素的数量。问题在于它不仅仅是一张地图,而且其中很多都是从地图列表中获取的。Java Stream。提取多个映射的不同值
具体而言,我有一个Tournament
类与List<Event> event
成员。一个event
有一个Map<Localization, Set<Timeslot>> unavailableLocalizations
成员。我想指出所有这些时隙值的区别。
到目前为止,我设法数在短短一个地图distincts这样的:
event.getUnavailableLocalizations().values().stream().distinct().count()
但我无法弄清楚是怎么做的,对于所有的地图,而不是只是一个。
我想我需要一些方法来获取每个事件的地图的值,并把所有的东西放到流中,其余的就像我一样。
答
让我们做一步一步来:
listOfEvents.stream() //stream the events
.map(Event::getUnavailableLocalizations) //for each event, get the map
.map(Map::values) //get the values
.flatMap(Collection::stream) //flatMap to merge all the values into one stream
.distinct() //remove duplicates
.count(); //count
我不知道的方法参考凉意是否足够高,使用'.MAP(事件:: getUnavailableLocalizations).MAP(地图::值的理由).flatMap(Collection :: stream)'而不是'.flatMap(event - > event.getUnavailableLocalizations()。values()。stream())'。后者可以更容易地识别从OP的方法到最终解决方案的缺失步骤。 – Holger