输入:新字符串[]{“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
我怎么才能修好这个?
您应该在第一个流中声明合并策略:
.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来实现这一点?