gpt4 book ai didi

java - 如何在 Java 8 中的重复键映射中添加值

转载 作者:行者123 更新时间:2023-12-03 11:17:34 24 4
gpt4 key购买 nike

我想在 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];
}
错误:

Exception in thread "main" java.lang.IllegalStateException: Duplicate key -1.0


我怎样才能解决这个问题?

最佳答案

您应该在第一个流中声明合并策略:

.collect(Collectors.toMap(e -> e[0], e -> Double.parseDouble(e[1]), Double::sum));
然后按零值过滤 Map:
  .filter(s-> s.getValue() != 0)
用于按键排序:
   .sorted(Map.Entry.comparingByKey())
结果代码:
   String [] 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]), Double::sum));

kvs.entrySet().stream()
.filter(s-> s.getValue() != 0)
.sorted(Map.Entry.comparingByKey())
.forEach(entry->{
System.out.println(entry.getKey() + " " + entry.getValue());w
});

关于java - 如何在 Java 8 中的重复键映射中添加值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66074299/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com