如何在Java 8中将a转换List<Entry>为Map<Entry::getKey, List<Entry::getValue>>使用流?
我无法为Collectors.toMap()提供一个好的KeySelector:
List<Entry<Integer, String>> list = Arrays.asList(Entry.newEntry(1, "a"), Entry.newEntry(2, "b"), Entry.newEntry(1, "c"));
Map<Integer, List<String>> map = list.stream().collect(Collectors.toMap(e -> e.getKey(), e -> e.getValue()));
Run Code Online (Sandbox Code Playgroud)
我想得到的:{'1': ["a", "c"], '2': ["b"]}.
Ous*_* D. 10
您可以使用groupingBy收集器和mapping下游收集器来执行此操作:
myList.stream()
.collect(groupingBy(e -> e.getKey(), mapping(e -> e.getValue(), toList())));
Run Code Online (Sandbox Code Playgroud)
需要进口:
import static java.util.stream.Collectors.*;
Run Code Online (Sandbox Code Playgroud)
实际上,您可以使用toMap收集器完成相同的结果:
myList.stream()
.collect(toMap(e -> e.getKey(),
v -> new ArrayList<>(Collections.singletonList(v.getValue())),
(left, right) -> {left.addAll(right); return left;}));
Run Code Online (Sandbox Code Playgroud)
但是当你可以使用groupingBy收藏家并且它的可读性较低时,它并不理想.
| 归档时间: |
|
| 查看次数: |
115 次 |
| 最近记录: |