Dictionary 如何使用值-键关系(Java)在这两个ArrayList之间进行遍历?

Dictionary 如何使用值-键关系(Java)在这两个ArrayList之间进行遍历?,dictionary,Dictionary,比方说,我有两个ArrayList。其中一个具有以下形式的字符串: [a, b, a, a, c, a, d, b, d, b] [(a, 11), (b, 7), (c, 5), (d, 11)] 另一个具有以下形式的整数: [1, 4, 2, 3, 5, 5, 6, 2, 5, 1] 在本例中,“a”具有/映射到值1、2、3和5(因为“a”位于arrayList 1中的索引0、2、3、5处,而arrayList 2中的索引0、2、3、5处的值为1、2、3和5)。“b”的值为4、2和1。

比方说,我有两个ArrayList。其中一个具有以下形式的字符串:

[a, b, a, a, c, a, d, b, d, b]
[(a, 11), (b, 7), (c, 5), (d, 11)]
另一个具有以下形式的整数:

[1, 4, 2, 3, 5, 5, 6, 2, 5, 1]
在本例中,“a”具有/映射到值1、2、3和5(因为“a”位于arrayList 1中的索引0、2、3、5处,而arrayList 2中的索引0、2、3、5处的值为1、2、3和5)。“b”的值为4、2和1。“c”的值为5。“d”的值为6和5

现在,我想从这两个ArrayList创建一个映射,格式如下:

[a, b, a, a, c, a, d, b, d, b]
[(a, 11), (b, 7), (c, 5), (d, 11)]
其中,每个字符串键匹配的值是arrayList 2中所有对应值的总和

有没有关于在Java中实现这一点的有效方法的建议


谢谢。

这种操作在抽象上是“压缩”。Java8的功能在这里非常有效

Map<String, Integer> m = IntStream.range(0, stringList.size()) // indices
    .boxed() // Stream<Integer>
    .collect(Collectors.toMap(
        stringList::get, // keyMapper
        intList::get, // valueMapper
        (x, y) -> x + y // mergeFunction for values when they have the same key
    ));
Map m=IntStream.range(0,stringList.size())//索引
.boxed()//流
.collect(collector.toMap)(
stringList::get,//keyMapper
intList::get,//valueMapper
(x,y)->x+y//merge函数用于具有相同键的值
));

此代码假定
intList
stringList
的大小相同或更长。如果
intList
可以更短,并且希望将缺少的值映射为0,则可以将valueMapper从方法引用修改为lambda。

谢谢!如果我想处理String,Double而不是String,Integer呢?我还会使用IntStream吗?
IntStream
是列表的索引。无论值的类型如何,列表的索引都是
int