[英]How to add a List of a pair of integers as a value in a Map with key as first value in the pair - Java
我想知道我是如何实现这种情况的 - 我有一个整数对 (a,b) 的列表 - 例如
[[0, 3],[0,3],[0,4],[1,2],[1,8],[1,14],[2,4],[2,5],[ 2,6]] - PairInt 类型列表
The pairInt functionality is defined like this:
class PairInt {
int first, second;
public PairInt(int first, int second) {
this.first = first;
this.second = second;
}
}
我想将此 Integer 对添加到 Map 中,这样它的组织方式如下:{0: [3, 3, 4], 1: [2, 8, 14], 2: [4, 5, 6]} ),例如键 0 应该具有与之关联的值,依此类推。
假设我有一个 HashMap 声明如下:
HashMap<Integer, List<Integer>> dm = new HashMap<Integer, List<Integer>>();
这可以在 Python 中简单地完成,
mapd= defaultdict(list)
for first, second in pairList:
mapd[first].append(second)
print(mapd)
即遍历列表并将其添加到 Map 中,使其采用上述组织。 对于上述 HashMap 结构,如何在 Java 中重现此行为
建议? 谢谢
这是一种方法。
使用Collectors.groupingBy
按对的第一个元素进行分组。 该值是作为列表收集的对的第二个元素。
dm = pairInts.stream()
.collect(Collectors.groupingBy(pairInt -> pairInt.first,
Collectors.mapping(pairInt -> pairInt.second, Collectors.toList())));
如果您的PairInt
class 中有吸气剂,您可以使用方法引用编写如下:
pairInts.stream()
.collect(Collectors.groupingBy(PairInt::getFirst,
Collectors.mapping(PairInt::getSecond, Collectors.toList())));
最简单的是使用番石榴多重映射(只需将所有对添加为键值对)。 您想要的 map 是它的一些特殊视图。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.