Java Stream。提取多个地图的不同值

时间:2016-05-06 12:19:43

标签: java java-8 java-stream

我正在尝试提取和计算地图值中不同元素的数量。问题在于它不仅仅是一张地图,而是其中许多地图,而且它们是从地图列表中获取的。

具体来说,我有一个Tournament类,其成员为List<Event> eventevent有一个Map<Localization, Set<Timeslot>> unavailableLocalizations成员。我想计算所有时间段值的区别。

到目前为止,我设法只计算一个地图中的区别:

event.getUnavailableLocalizations().values().stream().distinct().count()

但我无法弄清楚的是如何为所有地图而不仅仅是一张地图。

我想我需要一些方法来获取每个事件的地图值并将所有内容放入流中,然后剩下的就像我一样。

1 个答案:

答案 0 :(得分:11)

让我们一步一步来做:

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