gpt4 book ai didi

java - 使用流,如何映射 HashMap 中的值?

转载 作者:IT老高 更新时间:2023-10-28 20:38:44 27 4
gpt4 key购买 nike

给定一个 Map<String, Person>其中 Person 有 String getName() (等)方法就可以了,我怎样才能打开Map<String, Person>变成 Map<String, String> String通过调用 Person::getName() 获得?

我会使用 Pre-Java 8

Map<String, String> byNameMap = new HashMap<>();

for (Map.Entry<String, Person> person : people.entrySet()) {
byNameMap.put(person.getKey(), person.getValue().getName());
}

但我想使用流和 lambdas 来实现。

我看不到如何以函数式样式执行此操作:Map/HashMap 不实现 Stream .

people.entrySet()返回 Set<Entry<String, Person>>我可以流式传输,但如何添加新的 Entry<String, String>到目的地 map ?

最佳答案

使用 Java 8,您可以:

Map<String, String> byNameMap = new HashMap<>();
people.forEach((k, v) -> byNameMap.put(k, v.getName());

虽然你最好使用 Guava 的 Maps.transformValues ,它包装了原始的Map,并在你做get的时候进行转换,也就是说你只有在实际消费值时才支付转换费用。

使用 Guava 将如下所示:

Map<String, String> byNameMap = Maps.transformValues(people, Person::getName);

编辑:

根据@Eelco 的评论(为了完整起见),最好使用Collectors.toMap 转换为 map 。像这样:

Map<String, String> byNameMap = people.entrySet()
.stream()
.collect(Collectors.toMap(Map.Entry::getKey, (entry) -> entry.getValue().getName());

关于java - 使用流,如何映射 HashMap 中的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22840170/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com