Map.merge不会为ArrayList添加值

问题描述 投票:1回答:2

我有一个映射,并尝试将值添加到arraylist。

示例:键:1值:ArrayList(1),键:2值:ArrayList(2),键:3值:ArrayList(3,3)

    String ss = "1233";
    char[] a = ss.toCharArray();
    Map<Character, ArrayList<Character>> mymap = new LinkedHashMap<>();
    for (char c : a) {
        mymap.merge(c,new ArrayList<>(c), (o,n)->{
          o.addAll(n); return o;
        });
    }

但是它确实起作用,值(ArrayList)始终为空。我究竟做错了什么?调试器输出:

mymap = {LinkedHashMap@418}  size = 3
        {Character@599} 1 -> {ArrayList@600}  size = 0
        key = {Character@599} 1
        value = {ArrayList@600}  size = 0
        {Character@604} 2 -> {ArrayList@605}  size = 0
        key = {Character@604} 2
        value = {ArrayList@605}  size = 0
        {Character@609} 3 -> {ArrayList@610}  size = 0
        key = {Character@609} 3
        value = {ArrayList@610}  size = 0
java
2个回答
2
投票

您要在ArrayList中放入空的Map,然后合并空的ArrayList,从而导致空的ArrayList

尝试:

mymap.merge(c,new ArrayList<>(Arrays.asList(c)), (o,n)->{
    o.addAll(n); return o;
});

mymap.merge(c,new ArrayList<>(List.of(c)), (o,n)->{
    o.addAll(n); return o;
});

现在Map将包含:

{1=[1], 2=[2], 3=[3, 3]}

2
投票
new ArrayList<>(c)

没有按照您的想法去做。它正在创建一个空列表,其初始容量与字符的整数值有关。

这是not用单个元素创建列表。

© www.soinside.com 2019 - 2024. All rights reserved.