как сделать так, чтобы древовидная карта сортировалась по убыванию и показывала повторяющиеся значения - PullRequest
0 голосов
/ 01 мая 2018

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

TreeMap<Double,String> hm=new TreeMap<Double,String>(Collections.reverseOrder());

hm.put(0.1,"sara"); 
hm.put(0.13,"nahla");
hm.put(0.13,"saeed");
hm.put(0.2,"omar");
hm.put(0.5,"olaa");
hm.put(0.5,"noha");

Set set = hm.entrySet();
    Iterator i2 = set.iterator();
   while(i2.hasNext()) {
      Map.Entry me = (Map.Entry)i2.next();
      System.out.print(me.getKey() + ": ");
      System.out.println(me.getValue());
    } 

вывод:

0.5: noha
0.2: omar
0.13: saeed
0.1: sara

и я хочу быть таким:

0.5: noha
0.5: olaa
0.2: omar
0.13: saeed
0.13: nahla
0.1: sara

1 Ответ

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

TreeMap не допускает дублирование, поэтому вместо этого используйте LinkedMultiValueMap из org.springframework.util.LinkedMultiValueMap сохранить и затем отсортировать.

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;

public class ds {

public static void main(String[] args) {

    MultiValueMap<Double, String> map = new LinkedMultiValueMap<Double, String>();
    map.add(8.9, "g");
    map.add(4.6, "h");
    map.add(10.5, "a");
    map.add(10.5, "b");
    map.add(9.6, "c");
    map.add(8.6, "d");
    map.add(8.6, "e");
    map.add(8.0, "f");
    map.add(2.8, "i");

    MultiValueMap<Double, String> filteredMap = filter(5, map);
    System.out.println(filteredMap.toString());

}

public static MultiValueMap<Double, String> filter(int numberOfResults,
        MultiValueMap<Double, String> map) {
    MultiValueMap<Double, String> result = new LinkedMultiValueMap<Double, String>();

    List<Double> keys = new ArrayList<Double>(map.keySet());
    Collections.sort(keys, Collections.reverseOrder());

    for (Double key : keys) {
        if (result.size() <= numberOfResults) {
            result.put(key, map.get(key));
        } else {
            break;
        }
    }

    return result;

}
}
...