Java Stream。提取多个映射的不同值

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 
+1

我不知道的方法参考凉意是否足够高,使用'.MAP(事件:: getUnavailableLocalizations).MAP(地图::值的理由).flatMap(Collection :: stream)'而不是'.flatMap(event - > event.getUnavailableLocalizations()。values()。stream())'。后者可以更容易地识别从OP的方法到最终解决方案的缺失步骤。 – Holger