java - 从列表创建 map ,其中键是内部和外部对象的一部分

标签 java java-8 java-stream

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

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 因为我会丢失以前的信息。 每个创建的 key 都是唯一的。

最佳答案

好吧,您可以通过Pair 传递它们(虽然我还没有编译这个,但想法应该在那里)

 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 - 从列表创建 map ,其中键是内部和外部对象的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46561693/

相关文章:

Java调用抽象父类(super class)中后代类的方法

java - Hibernate 查询 LIKE 子句,但用空格分隔查找前缀和通配符

java - 如何使用 Java Stream 从列表中获取任何数据的特定索引?

Java IO 套接字不发送输出流

java - 如何使用 Java 流进行过滤

java - 我的类(class)中可以包含哪些代码行,以便对电子邮件和密码进行验证?

java - 如何在 Maven 中获取特定分支的 SVN 内部版本号

java 无法在我最近更新的 Windows 10 计算机上运行

java - 收集以映射已排序流的顺序/位置值

java - 并行流的 Stream.spliterator 的奇怪行为