【发布时间】:2021-05-10 10:42:13
【问题描述】:
我想在 Java 8 的重复键映射中添加值。
举个例子:
例如:如果 strArr 是 ["B:-1", "A:1", "B:3", "A:5"],那么我的程序应该返回字符串 A:6,B:2。
我的最终输出字符串应该按字母顺序返回键。求和后排除值为0 的键。
输入:new String[] {"X:-1", "Y:1", "X:-4", "B:3", "X:5"}
输出:B:3,Y:1
输入:new String[] {"Z:0", "A:-1"}
输出:A:-1
尝试过的代码:
public static String Output(String[] strArr) {
//strArr = new String[] {"X:-1", "Y:1", "X:-4", "B:3", "X:5"};
Map<String, Double> kvs =
Arrays.asList(strArr)
.stream()
.map(elem -> elem.split(":"))
.collect(Collectors.toMap(e -> e[0], e -> Double.parseDouble(e[1])));
kvs.entrySet().forEach(entry->{
System.out.println(entry.getKey() + " " + entry.getValue());
});
return strArr[0];
}
错误:
线程“主”java.lang.IllegalStateException 中的异常:重复键 -1.0
我该如何解决这个问题?
【问题讨论】:
-
您在创建地图时向地图添加相同的键。只需将您的
Map替换为List<Pair>。 -
我怎样才能避免这种情况并解决这个问题
-
您不能将重复的键添加到映射中。仅替换以前的值。
-
你能建议我解决这个问题吗
-
可以使用
Map::compute修改当前值(key是否存在无关)。
标签: java collections