作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想在 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/
我是一名优秀的程序员,十分优秀!