java合並map
❶ 面試官:Java 8 map 和 flatMap 的區別大部分人答不上來!
棧長在面試中常問Java 8中map和flatMap的區別,大部分人答不上來。這里所討論的map和flatMap並非集合,而是Stream介面中的方法。它們可以幫助你更高效地處理數據流。
Map方法的主要作用是對流中的每個元素進行轉換。假設你有一個包含字元串的List,現在你想將每個元素後面添加一個前綴"---"。可以通過以下步驟實現:
- 將List轉換為Stream。
- 調用Stream的map方法對每個元素執行封裝操作。
- 將Stream轉換回List。
執行後,輸出結果會是每個元素後面加有"---"的字元串列表。如果List中的元素是整數,可以直接使用內置的mapToXxx方法,例如mapToLong。這會將流轉換為LongStream,然後可以進行更多基於整數的操作。
FlatMap方法的作用是將流中的元素進行平鋪,形成多個流合並成一個流。如果有一個包含字元串數組的List,使用FlatMap後,會將所有數組元素合並成一個流,元素數量為所有數組元素的總和。
總結來說,Map適用於簡單元素轉換,FlatMap適用於數組流的平鋪合並。理解這些方法的應用場景,可以幫助你在項目中更高效地使用Stream。
希望你通過閱讀本文能夠掌握map和flatMap的區別,並在項目中加以應用。如果你還有Java 8的知識點想要學習,可以關注Java技術棧,獲取更多關於Java 8+系列教程。本文所有示例代碼已上傳至GitHub,歡迎訪問學習。
❷ Java8 中 List 轉 Map(Collectors.toMap) 使用技巧
實際項目中,將 List 轉換為 Map 是常見操作。過去可能通過 for 循環完成,而 Java8 引入了 Stream 特性,簡化了這類操作。例如:
定義類:
創建 List:
目標 Map 結構為:
過去實現方式(循環):
利用 Java8 特性,上述操作可簡化為:
若需 Map 的 value 為對象自身,可相應調整:
Collectors.toMap 方法具有三個重載版本,其參數含義如下:
如上例,當 List 中的 userId 重復時,原方法會引發異常。此時,應調用第二個重載版本,加入合並函數:
輸出結果:
若希望 Map 按 Key 排序返回,可自定義返回 Map 類型,例如:
輸出結果: