dictionary - 我将如何通过值键关系(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 中实现这一点的有效方法的任何指针?
谢谢。
解决方案
这种操作抽象地说是“压缩”。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。
推荐阅读
- jquery - Angular 7+,如何正确包含和使用 jquery 依赖或 js ui-libraries(无类型)并加载/卸载它们
- javascript - 从表的第一列抓取数据并附加到jQuery中的最后一列
- javascript - 在另一个 forEach 方法中使用变量
- angular - Angular 7 事件绑定
- r - 如何创建一个函数以从数据框中提取列并使用 R 创建另一个?
- android - 有没有一种方法可以使用 MLKit 检测皮肤上的损伤
- c# - 将技能中的信息存储/发送到 Microsoft 虚拟助手
- javascript - 使用 Firebase 时未设置 DisplayName
- python - speedtest-cli python脚本,插入sql值错误
- java - Java 9 takeWhile 和 dropWhile 读取和跳过某些行