是否可以(以简单的方式)将其更改为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
都是唯一的。
答案 0 :(得分:5)
那么你可以通过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));
答案 1 :(得分:2)
您可以直接使用collect
,如果您确定每个创建的密钥都是唯一的,如上所述,累加器和组合器很容易编写:
Map<String, String> map =
list.stream().collect(HashMap::new,
(m, p) -> p.getInternals().forEach(i -> m.put(p.getName() + i.getKey(), i.getValue())),
Map::putAll);