我有一个映射,并尝试将值添加到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
您要在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]}
new ArrayList<>(c)
没有按照您的想法去做。它正在创建一个空列表,其初始容量与字符的整数值有关。
这是not用单个元素创建列表。