我想将java地图中的每个值与另一个值

时间:2018-05-22 17:11:07

标签: java hashmap

如果某个值与另一个值匹配,那么我想将与该值对应的键值对变为新映射,并且将不匹配的值(即唯一键,值对)转换为另一个映射。

例如:

Map<String,Double> map = new HashMap<String,Double>();

map.put("First",123.12345); //data1
map.put("Second",234.3456); //data2
map.put("Third",576.9876); //data3
map.put("Fourth",123.12345);//data4
map.put("Fifth",234.3456); //data5
map.put("Sixth",999.8888); //data6
map.put("Seventh",677.4578); //data7

现在这里(data1和data4)值(data2和data5)和匹配,我想在新地图中存储这些(键,值)对

类似地,data3,data和data7具有唯一值,我想将这些(键,值)对存储在另一个新Map中。

感谢任何帮助。

提前致谢。

1 个答案:

答案 0 :(得分:0)

您按地图值进行分组,并将具有相同值的条目收集到地图中。

{
   123.12345 -> {
       First -> 123.12345,
       Fourth -> 123.12345
   }, 
   234.3456 -> ...
}

这会给你如下结果:

Map<Double, Map<String, Double>> result = new HashMap<>();
for (Entry<String, Double> mapping : map.entrySet()) {
    Double value = mapping.getValue();
    if (!result.containsKey(value)) {
        result.put(value, new HashMap<>());
    }
    // Add new pair to map
    result.get(value).put(mapping.getKey(), value);
}

在java 7中:

text_size : self.size