如何将一对整数的List添加到Map中作为值,并将key作为对中的第一个值- 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;
}
}

我想把这个整数对添加到一个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中,这样它就采用了上面提到的组织。如何在Java中为上面提到的HashMap结构重现这种行为

建议吗?由于

这是一种方法。

使用Collectors.groupingBy按对的第一个元素分组。该值是作为列表收集的对的第二个元素。

dm = pairInts.stream()
.collect(Collectors.groupingBy(pairInt -> pairInt.first, 
Collectors.mapping(pairInt -> pairInt.second, Collectors.toList())));

如果你有getter在你的PairInt类,你可以写使用方法引用:

pairInts.stream()
.collect(Collectors.groupingBy(PairInt::getFirst,
Collectors.mapping(PairInt::getSecond, Collectors.toList())));

最简单的方法是使用guava multimap(只需将所有对添加为键值对)。你想要的地图是它的一个特殊视图。

最新更新