提问人:AntonBoarf 提问时间:10/31/2018 更新时间:10/31/2018 访问量:194
Java 8 流转换和列表
Java 8 streams transformations and List
问:
我有一个:
Map<String,List<String>> persons
而 中的每个元素都代表一个String
List<String>
Long
所以我想把我变成一个Map<String,List<String>>
Map<String,List<Long>>
问题是我的列表被封装到地图中。我知道使用单个列表,我可以做到这一点:
list.stream().map(s -> Long.valueOf(s)).collect(Collectors.toList());
但我的情况有点不同。知道如何进行吗?
谢谢
答:
3赞
Eugene
10/31/2018
#1
Map<String,List<String>> persons = ...
Map<String, List<Long>> result = new HashMap<>();
persons.forEach((key, value) -> {
result.put(key, value.stream().map(Long::valueOf).collect(Collectors.toList()));
});
评论
0赞
Naman
10/31/2018
为什么不简单地收集toMap呢?
0赞
Eugene
10/31/2018
@nullpointer因为另一个答案已经这样做了,我猜
0赞
Naman
10/31/2018
哦,这样一来,我几乎想到了将两个收集器调用与一种类型的比较进行比较:)我的坏..
2赞
Holger
10/31/2018
这里不需要语句语法,即您可以删除大括号和一个分号......
4赞
davidxxx
10/31/2018
#2
您可以使用此集合:
list.stream().map(s -> Long.valueOf(s)).collect(Collectors.toList());
作为应用于地图流的参数。valueMapper
toMap()
这将给出:
import static java.util.stream.Collectors.toList;
import static java.util.stream.Collectors.toMap;
Map<String,List<String>> persons = ...;
Map<String,List<Long>> personsMapped =
persons.entrySet()
.stream()
.collect(toMap(Entry::getKey, e -> e.getValue().stream()
.map(Long::valueOf)
.collect(toList()))
);
1赞
Ravindra Ranwala
10/31/2018
#3
你可以这样做,
Map<String, List<Long>> longMap = persons.entrySet().stream()
.collect(Collectors.toMap(Map.Entry::getKey,
e -> e.getValue().stream().map(s -> Long.valueOf(s)).collect(Collectors.toList())));
评论