首页 > 解决方案 > 我将如何通过值键关系(Java)在这两个 arrayLists 之间遍历?

问题描述

例如,假设我有两个数组列表。一个具有以下形式的字符串:

[a, b, a, a, c, a, d, b, d, b]

另一个具有以下形式的整数:

[1, 4, 2, 3, 5, 5, 6, 2, 5, 1]

在这种情况下,“a”具有/映射到值 1、2、3 和 5(因为“a”位于 arrayList 1 中的索引 0、2、3、5 处,而值位于索引 0、2、3 处, arrayList 2 中的 5 是 1、2、3 和 5)。“b”的值为 4、2 和 1。“c”的值为 5。“d”的值为 6 和 5。

现在我想从这两个 arrayLists 中创建一个 Map,格式如下:

[(a, 11), (b, 7), (c, 5), (d, 11)]

其中每个字符串键匹配的值是arrayList 2中所有对应值的总和。

关于在 Java 中实现这一点的有效方法的任何指针?

谢谢。

标签: dictionary

解决方案


这种操作抽象地说是“压缩”。Java 8的在这里工作得很好。

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
    ));

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


推荐阅读