java – 从列表创建映射,其中key是内部和外部对象的一部分

是否有可能(以简单的方式)将其更改为 java8 Stream? (请不要评论/回答,如果你想告诉我两个更好,而不是所有循环都应该改为流,这不是一个点)

final Map<String,String> map = new HashMap<>();

for(final Person person: list) {
    for(final Internal internal: person.getInternals()) {
        final String key = person.getName() + internal.getKey();
        map.put(key,internal.getValue());
    }
}

主要问题是我不能使用flatMap,因为我将丢失以前的信息.每个创建的密钥都是唯一的

解决方法

那么你可以通过一对来传递它们(虽然我没有编译,但这个想法应该在那里)

list.stream()
    .flatMap(person -> person.getInternals()
                       .stream()
                       .map(internal -> 
                           Pair.of(person.getName() + internal.getKey(),internal.getValue()))
    .collect(Collectors.toMap(Pair::getLeft,Pair::getRight));

相关文章

Java中的String是不可变对象 在面向对象及函数编程语言中,不...
String, StringBuffer 和 StringBuilder 可变性 String不可变...
序列化:把对象转换为字节序列的过程称为对象的序列化. 反序...
先说结论,是对象!可以继续往下看 数组是不是对象 什么是对...
为什么浮点数 float 或 double 运算的时候会有精度丢失的风险...
面试题引入 这里引申出一个经典问题,看下面代码 Integer a ...