当前位置: 首页 > 知识库问答 >
问题:

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

彭浩穰
2023-03-14

输入:新字符串[]{“x:-1”,“y:1”,“x:4”,“b:3”,“x:5”}

输出:b:3,y:1

输入:新字符串[]{“z:0”,“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

我怎么才能修好这个?

共有1个答案

魏景龙
2023-03-14

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

.collect(Collectors.toMap(e -> e[0], e -> Double.parseDouble(e[1]), Double::sum));

然后通过零值过滤映射:

  .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
    });
 类似资料:
  • 我有一张这样的清单 在此基础上,我想创建一个如下所示的地图: 我试过了 但是没有得到期望值。我只得到最后一个元素。如果我将列表创建移到foreach循环之外,那么我将获得所有值。

  • 只有当每个键在map1中都有唯一的值时,我才会陷入如何将键值对从map1转移到map2的困境。 假设我有以下地图: 地图1:[1,2][2,4][4,4] 我想算法应该是: 遍历第一张地图中的条目。 向map2添加密钥。 将一个值添加到检查map2的值的集合 如果值是重复的,则不会将该值添加到集合中,并且忽略将其相应的键添加到map2。 代码片段: 我的想法是如何在正确的轨道上完成的吗?这里迷失了

  • 我使用.map()函数的方式与在其他项目中完全相同,但在我当前正在处理的项目中,它向我抛出了一个错误:这是我的代码(正如我提到的,它的结构在其他项目中也适用): 我想知道这是否与我在从外部库导入的组件内部进行映射有关。

  • 想改进这个问题吗?通过编辑这篇文章添加细节并澄清问题。 我所拥有的是, 我想要的是, 其中,

  • xml文件位于我的项目的中。我正在使用Eclipse并运行Tomcat(它不是通过Eclipse安装的,我更希望它是一个单独的安装)。 当表单页面提交给servlet时,它就不起作用了。我每次都得到一个404错误。我遇到这个问题有一段时间了。谁来帮帮我。

  • 我有多个数组映射。 我想从多个地图中获取重复地图键的列表。 例如 除了遍历所有地图键,检查集合是否包含键,如果不将键添加到集合中,我想不出任何更干净的方法。有没有办法通过streams来实现这一点?