Я хочу сравнить каждое значение в карте Java с другим значением - PullRequest
0 голосов
/ 22 мая 2018

Если значение совпадает с другим значением, я хочу получить ключ, пару значений, соответствующую этому значению, в новую карту и значения, которые не совпадают, т.е. уникальный ключ, пары значений в другую карту.

Например:

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

Теперь здесь (данные1 и данные4) значения (данные2 и данные5) и совпадают, и я хочу сохранить эти пары (ключ, значение) в новой карте

Аналогично, data3, data и data7 имеют уникальные значения, и я хочу сохранить эти пары (ключ, значение) в другой новой карте.

Любая помощь приветствуется.

Заранее спасибо.

1 Ответ

0 голосов
/ 22 мая 2018

Вы группируете по значению карты и собираете эти записи с тем же значением в карту.

Map<Double, Map<String, Double>> result = 
   map.entrySet().stream()
                 .collect(groupingBy(Entry::getValue, toMap(Entry::getKey, Entry::getValue)));

Это даст вам результат, подобный:

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

В Java7:

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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...