![](/img/trans.png)
[英]How to get the cell values from column1 and column 3 and put in map as key value pair using excel in java
[英]how to get summation of pair(key) values in a map in java?
我有一个映射,它表示映射到一个值的 string-int 矩阵:
static Map<Pair<String,Integer>, Integer> wordTopic = new HashMap<>();
我想得到具有特定字符串(对的一部分)的值的总和,而不是整个对Pair<String,Integer>
AKA 一行的总和。
示例:矩阵
string/int 1 2 value1 13 26 value2 11 22
我想要字符串“value1”的行值的总和 ..output 应该是 =39
我发现了这个: Integer integerSum = wordTopic.values().stream().mapToInt(Integer::intValue).sum();
但这将使我得到整个密钥 AKA 整个矩阵的值的总和,我只想要行的总和..有什么提示吗?
我认为:
输入:
a-1 = 100
a-2 = 200
b-4 = 400
b-8 = 800
输出:
a = 300
b = 1200
使用 map.entries() 可能有助于更轻松地处理该行。
您似乎想先按字符串分组,因此检查 Map.Entry.getKey().getValue0() 的 .group() lambda 将制作<String, List<Map.Entry>>
的映射
对于其中的每一个,您都会执行所需的 .map 和 .sum 等(留作作业...)
您可能会说带有另一个哈希图的旧 for 循环将更具可读性......
假设 Pair 如下。
public class Pair<T, U> {
public final T first;
public final U second;
public static <T, U> Pair<T, U> of(T first, U second) {
return new Pair<>(first, second);
}
public Pair(T first, U second) {
this.first = first;
this.second = second;
}
}
那么怎么样:
String wordToFilterFor = "abc";
Integer integerSum = wordTopic.entrySet()
.stream()
.filter(entry -> entry.getKey().first.equals(wordToFilterFor))
.map(e -> e.getValue())
.mapToInt(Integer::intValue).sum();
基本上用 entrySet 启动流,这样你就可以访问 Pair kay。 然后过滤成对的词。
您可以创建一个函数:
int getSummationOfValuesByKey(Map<Pair<String,Integer>, Integer> map, String key) {
return map.entrySet()
.stream()
.filter(e -> e.getKey().getKey().equals(key))
.mapToInt(Map.Entry::getValue)
.sum();
}
给定一个映射和一个键将返回值的总和,其中 Pair 的键等于提供的键。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.