2017-08-23 84 views
1

我想知道是否有這個問題的單行選項。Java 8迭代列表裏面的一個列表和stream.map()

我有一顆豆一樣,在DataA

public class DataA { 
    private String name; 
    private String email; 
    private List<String> accountNumberName; 
} 

樣本值

name="user1",email="[email protected]",accountNumberName=["100", "101", "102"]等。

我有地圖帳號和姓名在accountNumberNameMapMap<String, String> accountNumberNameMap 示例數據like,

{"100"="Account A", "101" = "Account B", "102" = "Account C"}

我想轉換DataAname="user1",email="[email protected]",accountNumberName=["100 - Account A", "101 - Account B", "102 - Account C"]

我DataA的List<DataA>的集合,想用accountNumberNameMap把所有我accountNumberName的「列表」裏面有account number - Account name

我可以通過使用幾個循環,然後將帳號轉換爲帳號 - 帳號名稱。想知道在Java8流中是否有一種簡單的方法來完成它。

+0

當地圖不包含帳號時,您想要做什麼? –

+0

我認爲'accountNumberNameMap.getOrDefault(acc,「」)'應該處理它。 – Bala

+0

問題不在於如何對其進行編碼,而是應該是什麼行爲。那麼,你的答案是使用空白字符串,就像左連接一樣? –

回答

2

如果您不介意直接修改列表中的實例,您可以使用forEach加上replaceAll(爲了簡單起見,我可以訪問accountNumberName,但您也可以通過setter輕鬆更改它)。

list.forEach(d -> d.accountNumberName.replaceAll(acc -> acc + " - " + accountNumberNameMap.getOrDefault(acc, ""))); 

如果你不想修改現有的情況下,這是可以做到這樣(假設拷貝構造函數存在):

list.replaceAll(d -> new DataA(d.name, d.email, d.accountNumberName.stream().map(name -> name + " - " + accountNumberNameMap.getOrDefault(name, "")).collect(toList()))); 

(然後如果你不希望修改原始列表,只是流/收集而不是使用replaceAll

+0

我想直接更新列表中的實例..感謝您的快速回復。 – Bala