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

标签 java collections

我想在 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/

相关文章:

java - 比较两个或多个 map 的数据

java - 相机不保存图像

java - JTextPane 和悬挂缩进故障

java - 具有两个不同顶点的 JUNG 图

java - 太空侵略者游戏

java - 对象的集合并通过父类(super class)找到它们

c# - 如何验证集合是否包含所有唯一对象

java - 方法预期通过比较器比较两个字段,但仅按 1 排序

Java关于图形坐标的问题

java - 为什么我收到 "cannot be resolved to a type"错误?