преобразование набора в arrayList с помощью операций сортировки - PullRequest
0 голосов
/ 09 декабря 2018

У меня есть Map<Integer, Set<Integer>>, и я хочу получить список ключей в виде ArrayList в возрастающем порядке.

Так, например, моя карта:

Key|Value
2--->set1
1--->set2
5--->set3

Я хочуget the arraylist: [1,2,5]

public class Example {
     public static void main( String[] args ) {
         Map<Integer,Set<Integer>> map = new HashMap<>();
         Set<Integer> set1 = Stream.of(1,2,3).collect(Collectors.toSet());
         Set<Integer> set2 = Stream.of(1,2,3).collect(Collectors.toSet());
         Set<Integer> set3 = Stream.of(1,2,3).collect(Collectors.toSet());
         map.put(2,set1);
         map.put(1,set2);
         map.put(5,set3);


         //what i have done:
         List<Integer> list = map.keySet()
                                 .stream()
                                 .collect(Collectors.toCollection(ArrayList::new));
         list.sort((a,b)->a>b?b:a);
         System.out.println(list);

     }
}

Этот пример делает то, что я хочу, но я ищу решение, которое сделает сортировку во время сбора элементов?

Ответы [ 2 ]

0 голосов
/ 10 декабря 2018

Еще лучше, просто измените HashMap на TreeMap следующим образом:

Map<Integer,Set<Integer>> map = new TreeMap<>();

Цитирование из документов "Реализация NavigableMap на основе красно-черного дерева. Карта сортируется в соответствии с естественным упорядочением ее ключей, илиКомпаратором, предоставляемым во время создания карты, в зависимости от того, какой конструктор используется. "В случае целых чисел у вас будет естественный порядок:)

0 голосов
/ 09 декабря 2018

используйте метод sorted:

List<Integer> list = map.keySet()
                .stream()
                .sorted()
                .collect(Collectors.toCollection(ArrayList::new));
...