2017-08-23 46 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