繁体   English   中英

如何添加一对整数列表作为 Map 中的值,其中键作为对中的第一个值 - Java

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM