2017-02-09 22 views
-4
私は地図のリストを変換したい

すなわちマップのマップへのJava 8の変換リスト<地図<文字列、文字列>マップする<文字列、地図<文字列、文字列>>

List<Map<String,String> 

すなわち

Map<String,Map<String,String>>; 
私はマップの2 Cities.Myリストの間Distanaceを格納しています地図の一覧で

は次のとおりです。

[{先= IOWA、距離= 2000、ソース= NY}、{先= OHIO、宛先= NY、 距離= 2500、ソース= 10、距離= 3000、ソース= NY} = TX}、{先= DEL、距離= 3000、 ソース= TX}]

は、今私たちは、すべての都市.Outerからの距離を得ることができるように

MAP<String<Map<String,String>>, 

に変換する必要がありマップキーはソース都市になります。バリューマップには、Destination CityがKeyとして、SourceとDestinationとの間の距離がValueとして設定されます。出力形式になります:

{TX = {NC = 1500 DEL = 3000、NY = 2500}、NY = {IOWA = 2000、TX = 2500 OHIO = 3000}}

Java 8 Stream APIを使用して変換したいです。 groupingbyの使い方がわからない

+0

あなたはそれを打って何か試しましたか? – Fildor

+2

適切なオブジェクトを使用してみませんか?マップのリストは常にコードのにおいです。 – Kayaman

答えて

5

他の人が指摘しているように、データに理想的な構造を使用しているわけではありません。しかし、これはあなたが状況の下で望むことを行う必要があります:

Map<String, Map<String, String>> distancesBySource = distances.stream() 
     .collect(Collectors.groupingBy(m -> m.get("Source"), 
       Collectors.toMap(m -> m.get("Destination"), m -> m.get("distance")))); 
+0

私はあなたの答えをupvoted重複データポイント –

+0

がある場合IllegalStateExceptionをスローすることに注意してください。私もupvotesを受信して​​いるので、私はそれを削除しません。そのような場合の「ベストプラクティス」はありますか? – Fildor

+0

@Fildor答えとして拡張コメントを投稿するのは受け入れられる(または少なくとも受け入れられる)と思います。個人的には、カヤマンの元のコメントよりも多くの内容を追加したとは思わなかった。しかし、それは私が少数派であるように見えます。 – shmosel

関連する問題