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

Bye*_*Bye 3 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());
    }
}
Run Code Online (Sandbox Code Playgroud)

主要问题是我无法使用,flatMap因为我将丢失以前的信息.每个创建key都是独特的.

Eug*_*ene 5

那么你可以通过a传递它们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));
Run Code Online (Sandbox Code Playgroud)