首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Java 8转换Map的每个条目集的键和值?

如何使用Java 8转换Map的每个条目集的键和值?
EN

Stack Overflow用户
提问于 2016-10-18 23:25:42
回答 2查看 4.3K关注 0票数 3

我有一个Map<String, String>,我想用Java将它转换成一个Map<Type1,Type2>

这是我尝试过的,但我认为我的语法弄错了:

代码语言:javascript
复制
myMap.entrySet()
.stream()
.collect(Collectors.toMap(e -> Type1::new Type1(e.getKey()), e -> Type2::new Type2(e.getValue))));

也试过

代码语言:javascript
复制
myMap.entrySet()
    .stream()
    .collect(Collectors.toMap(new Type1(Map.Entry::getKey), new Type2(Map.Entry::getValue));

但我一直在运行编译错误。我该怎么做这个转变?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-18 23:49:06

看起来你真正想要的是

代码语言:javascript
复制
 myMap.entrySet()
     .stream()
     .collect(Collectors.toMap(
         e -> new Type1(e.getKey()), e -> new Type2(e.getValue())));

虽然我承认这真的很难分辨。

票数 11
EN

Stack Overflow用户

发布于 2016-10-18 23:35:06

代码语言:javascript
复制
myMap.entrySet().stream()
     .map(entry -> new AbstractMap.SimpleEntry(new Type1(entry.getKey()), new Type2(entry.getValue()))
     .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue))

https://docs.oracle.com/javase/7/docs/api/java/util/AbstractMap.SimpleEntry.html

或者更优雅:

代码语言:javascript
复制
myMap.entrySet().stream()
     .map(this::getEntry)
     .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));

private Map.Entry<Type1, Type2> getEntry(Map.Entry<String, String> entry) { 
     return new AbstractMap.SimpleEntry(new Type1(entry.getKey()), new Type2(entry.getValue());
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40119648

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档