我有一個嵌套的以下類型的地圖LinkedHashMap<String, LinkedHashMap<String, ArrayList<Commit>>>
。第一張地圖的關鍵字存儲了一些用戶名,第二張地圖的關鍵字是用戶的存儲庫名稱,在ArrayList裏面我有一個對象,具有一些屬性,如散列,消息,附加等等。按照第一張地圖的關鍵字和第二張地圖的關鍵字按字母順序排列整個集合,我如何在同一類型的新集合(對象保持不變)中收集(保存)我的嵌套地圖?Java 8:如何排序和收集兩個內嵌ArrayList的嵌套地圖?
我需要使用lambda和Stream API來做到這一點。這是我想做到這一點的方式:
LinkedHashMap<String, LinkedHashMap<String, ArrayList<Commit>>> sorted = gitUsers.entrySet()
.stream()
.sorted((u1, u2) -> u1.getKey().compareTo(u2.getKey()))
.map(u -> u.getValue()
.entrySet()
.stream()
.sorted((r1, r2) -> collator.compare(r1.getKey(), r2.getKey())))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue,(a, b) -> a, LinkedHashMap::new));
我肯定做錯了什麼,因爲我不斷收到以下信息:「非靜態方法不能從靜態上下文中引用」,不能收集地圖。我想我無法成功組裝我的地圖,因爲.map()
函數和我用過的第二個流。
我知道你會建議我使用TreeMap或排序集合,並在我的lambda中使用.foreach()
方法立即打印它(我已經這樣做了),但我需要像這樣完成我已經在上面描述過。
爲了我的編程基礎課程的目的,這個問題應該以這種方式解決。希望你的幫助!
P.S.我一直在尋找解決方案很長一段時間,並且到處研究包括Stack Overflow論壇,並沒有找到任何相應的解決問題的方法。
gitUsers.entrySet()返回什麼類型? – Kostiantyn
gitUsers是以下類型的映射:LinkedHashMap >> gitUsers = new LinkedHashMap <>();'正如我在文章開頭提到的那樣。它是我通過第一個Map的鍵和第二個嵌套Map的鍵排序的初始Map,現在我想收集它 - 兩個具有ArrayList的地圖都收集到相同類型的Map中。 –
請參閱我的回答。我也建議你重命名你的帖子:*如何做嵌套的地圖排序*或因爲它是更通用的,因爲它是更通用 –