2017-02-09 123 views
-4

我想列出轉換地圖即的Java 8轉換列表<地圖<String,字符串>地圖<字符串,地圖<String,字符串>>

List<Map<String,String> 

到地圖的地圖即

Map<String,Map<String,String>>; 

在地圖我地圖兩個Cities.My列表之間存儲Distanace的列表是:

[{目的地= IOWA,距離= 2000,源= NY},{目的地= OHIO, 距離= 3000,來源= NY},{目的地= TX,距離= 2500,來源= NY}, {目的地= NC,距離= 1500,來源= TX},{目的地= NY, 距離= 2500, = TX},{目標= DEL,距離= 3000, 來源= TX}]

現在我必須把它轉換成

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

,使我們可以從所有城市.Outer獲得距離地圖密鑰將成爲來源城市。價值圖將具有目的地城市作爲關鍵字和源到目的地之間的距離作爲值。輸出將在格式:

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

我想通過使用Java 8 Stream API進行轉換。不知道如何使用分組。

+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

只是知道它會拋出IllegalStateException如果你有一個重複的數據點 –

+0

我upvoted你的答案。我也收到upvotes,所以我不會刪除它。這種情況有沒有「最佳做法」? – Fildor

+0

@Fildor我認爲可以接受(或至少被接受)發表擴展評論作爲答案。就我個人而言,我認爲你沒有比Kayaman的原始評論增加太多實質內容。但看起來我在這方面是少數。 – shmosel

相關問題