当前位置: 首页 > 知识库问答 >
问题:

添加到HashMap中的双Arraylist

韩宏朗
2023-03-14

在java中,我试图添加一对相加到一定数量的数组,我尝试的方法之一是在HashMap中创建一个双ArrayList。如果我在列表中添加1和2,我将得到3作为键。例如:

    HashMap<Integer, ArrayList<ArrayList<Integer>>> map = new HashMap<>();
    ArrayList<Integer> list = new ArrayList<>();
    list.add(1);
    list.add(2);
    map.put(list.get(0) + list.get(1), new ArrayList<>(list));

输出如下所示

   Key: 3 Value: [[1,2]]

如果我再加一对

  Key: 3 Value: [[1,2],[0,3]]

但是我一直得到一个'方法不适用于HashMap类型

我也试过了

    new ArrayList<>(new ArrayList<>(list))

我想我可能需要先初始化更大的矩阵,但遗憾的是,我最终还是出现了同样的错误。

共有2个答案

蓝侯林
2023-03-14

您还可以创建一些lambda,这可能有助于实现这一点。例如

Map<Integer, List<List<Integer>>> map1 = new HashMap<>();

创建一个函数来对列表中的元素求和。

Function<List<Integer>, Integer> sum =
        list -> list.stream()
        .mapToInt(Integer::intValue).sum();

然后创建一个双消费者,获取列表对和现有映射,并在需要时添加它们。如果键为null或不存在,则计算机输入键的值。返回列表,以便将该对添加到新创建的列表中。

BiConsumer<List<Integer>, Map<Integer,
           List<List<Integer>>>> addToMap =
        (pair, map) -> {
            map.computeIfAbsent(sum.apply(pair),
                    v -> new ArrayList<>()).add(pair);
        };

把这一切放在一起。

addToMap.accept(List.of(1,2), map1);
addToMap.accept(List.of(0,4), map1);
addToMap.accept(List.of(1,5), map1);
addToMap.accept(List.of(0,3), map1);
addToMap.accept(List.of(-1,5), map1);
addToMap.accept(List.of(-1,2,3),map1);

map1.entrySet().forEach(System.out::println);

指纹

3=[[1, 2], [0, 3]]
4=[[0, 4], [-1, 5], [-1, 2, 3]]
6=[[1, 5]]

如您所见,这不会对“对”施加任何大小限制。

这对于您想要的可能是多余的,但可能有一些元素您可以使用。还要注意,上面的List.of是不可变的。

宓弘壮
2023-03-14

该行:

new ArrayList<>(list)

创建一个平面ArrayList

考虑到二维列表设置,这是一种可行的方法:

HashMap<Integer, List<List<Integer>>> map = new HashMap<>();
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
List<List<Integer>> outer = new ArrayList<>();
outer.add(list);
map.put(list.get(0) + list.get(1), outer);

 类似资料:
  • 我在Java有一个源HashMap: 存储各种长度的关键字。我想遍历这个HashMap并计算出存储在映射的字符串部分中的ngram的长度,该字符串部分定义了每个关键字的文本。 使用这些数据,我想填充一个HashMaps的目标ArrayList: 结果是,ArrayList的索引对应于给定关键字的ngram大小减去1,即keywordNGrams(0)将接收unigrams,keywordNGram

  • 问题内容: 我经常需要获取对象列表,然后根据对象中包含的值将它们分组为Map。例如。列出用户和国家(地区)分组。 我的代码通常如下所示: 但是,我不禁会认为这很尴尬,某些专家有更好的方法。到目前为止,我能看到的最接近的是Google Collections的MultiMap。 有没有标准的方法? 谢谢! 问题答案: 在Java 8中,您可以使用。 或者,请使用流API的是从去到直接: 在Java

  • 我有一个散列表 这是我的代码 我应该对我的代码做什么样的修改来确保它能按照我的要求编译和运行?

  • 问题内容: 这是一些示例代码…我似乎总是会收到ClassCastException …有人指出我在做什么错吗? 问题答案: 为了被添加到(以自然顺序),一个类应该与其自身具有可比性: 而在您的情况下与:

  • 我有一个已经预先输入值的hashmap,并且我正在从用户那里获取更多的值。然后按升序对这些值进行排序。但是在这段代码中,用户输入的值不会插入到HashMap中。 我创建了一个名为adduser()的方法,我调用它来添加新值。但它不能输入数据。我该怎么解决这个?

  • 这是我的的商店代码片段,包含商品和价格: 这是我的杂货车,其中int表示一辆车中每件商品的数量。我对HashMaps非常陌生,对于如何将stock map引用到price方法中并正确地将其相加感到非常困惑。理论上,这个问题的最终答案是2个鸡蛋和2盒橙汁的价格。非常感谢您的帮助