我想知道这个问题是否有单行选项。
我有像豆一样的
public class DataA {
private String name;
private String email;
private List<String> accountNumberName;
}
DataA
中的示例值为
name="user1",email="user@a.b.com",accountNumberName=["100", "101", "102"]
等。
我有一个帐号和地址Map<String, String> accountNumberNameMap
的地图
accountNumberNameMap
中的示例数据类似于
{"100"="Account A", "101" = "Account B", "102" = "Account C"}
我想将DataA
转换为name="user1",email="user@a.b.com",accountNumberName=["100 - Account A", "101 - Account B", "102 - Account C"]
我有一个DataA集合List<DataA>
希望将“列表”中的所有accountNumberName
转换为使用account number - Account name
accountNumberNameMap
。
我可以通过使用几个循环然后将帐号转换为帐号 - 帐号名称来实现。想知道Java8流中是否有一种简单的方法可以做到这一点。
答案 0 :(得分:2)
如果您不介意直接修改列表中的实例,可以将forEach
与replaceAll
结合使用(我假设我可以访问accountNumberName
以简化您的操作也可以通过设定者轻松改变它。
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
)