2016-05-06 13 views
5

私はマップの値の異なる要素の数を抽出して数えようとしています。それは地図だけではなく、地図のリストからそれらの多くを取得することです。Javaストリーム。複数のマップの別個の値を抽出する

具体的には、私は、List<Event> eventメンバーのTournamentクラスを持っています。 eventにはMap<Localization, Set<Timeslot>> unavailableLocalizationsのメンバーがあります。私はこれらすべてのタイムスロット値のために別個のものを数えたいと思います。

は、これまでのところ私はこのようなただ一つのマップでdistinctsをカウントするために管理:

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

しかし、私が把握することはできませんと、すべてのマップのためだけではなくいずれかのことを行う方法です。

私は、各イベントの地図の値を取ってストリームに入れておく必要があると思っています。残りは私のようになります。

答えて

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

私はメソッド参照の涼しさが '.MAP(イベント:: getUnavailableLocalizations)の.map(マップ::値を使用して正当化するのに十分な高さであるかどうかわからないんだけど).flatMap(event - > event.getUnavailableLocalizations()。values()。stream()) 'の代わりに、.flatMap(Collection :: stream)'を呼び出します。後者は、最終的な解決策へのOPのアプローチから欠落しているステップを容易に認識することができます。 – Holger

関連する問題