[英]Java 8 List<String> into Map<String, K> where K is a new object that needs V in its constructor
在 Java 8 之前,我会这样编码:
Map<String, K> resultMap = new HashMap<>();
for (str : stringsList) {
resultMap.put(str, new K(str, new X(), new Y());
}
有什么办法可以让我改用 Java 8 风格吗?
理论上,你可以这样写:
Map<String, K> resultMap =
stringsList.stream().collect(Collectors.toMap(
str -> /*key=*/ str,
str -> /*value=*/ new K(str, new X(), new Y())
));
(使用java.util.stream.Collectors.toMap(Function, Function) )。
在实践中,我认为您当前的代码可能更清晰。
从 ruak 的回答中解决重复的键冲突:
Map<String, K> resultMap = stringsList.stream()
.collect(Collectors.toMap(
str -> str,
str -> new K(str, new X(), new Y()),
(oldVal, newVal) -> newVal)
);
List<String> stringsList = Arrays.asList("123", "456", "789");
Map<String, K> resultMap = new HashMap<String, K>();
stringsList.forEach(item -> resultMap.put(item, new K(item, new X(), new Y())));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.