如何在Java8中的重复键映射中添加值

我想在 Java 8 中的重复键映射中添加值。

举个例子:

例如:如果 strArr 是["B:-1", "A:1", "B:3", "A:5"]那么我的程序应该返回 string 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];
      }

错误:

线程“main”中的异常java.lang.IllegalStateException:重复键-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
    });


以上是如何在Java8中的重复键映射中添加值的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>