Группировка сборщиковПо вставке, в порядке возрастания и убывания - java8 - PullRequest
0 голосов
/ 25 июня 2019

Пример данных

List<Test> tests = new ArrayList();

Test test3 = new Test();
test3.setName("FELLOW");
test3.setDescription("DESC FELLOW 1");
tests.add(test3);

Test test4 = new Test();
test4.setName("FELLOW");
test4.setDescription("DESC FELLOW 2");
tests.add(test4);

Test test = new Test();
test.setName("HELLO");
test.setDescription("DESC Hello 1");
tests.add(test);

Test test1 = new Test();
test1.setName("HELLO");
test1.setDescription("DESC Hello 2");
tests.add(test1);

Test test2 = new Test();
test2.setName("HELLO");
test2.setDescription("DESC Hello 3");
tests.add(test2);

Test test5 = new Test();
test5.setName("ABC");
test5.setDescription("DESC FELLOW 3");
tests.add(test5);

Test test6 = new Test();
test6.setName("ABC");
test6.setDescription("DESC ABC 1");
tests.add(test6);

Чтобы получить данные в порядке вставки, я использовал LinkedHashMap

Map<String, List<Test>> insertionOrder = tests.stream().collect(Collectors.groupingBy(Test::getName, LinkedHashMap::new, Collectors.toList()));

результат:

FELLOW,
HELLO
ABC

Чтобы получить данные в порядке возрастания, я использовал TreeMap

Map<String, List<Test>> ascendingOrder = tests.stream().collect(Collectors.groupingBy(Test::getName, TreeMap::new, Collectors.toList()));

результат:

ABC,
FELLOW
HELLO

Как получить карту в порядке убывания? например?

HELLO,
FELLOW
ABC

1 Ответ

2 голосов
/ 25 июня 2019

Передайте Comparator конструктору TreeMap. Например:

Map<String, List<Test>> descendingOrder = 
    tests.stream()
         .collect(Collectors.groupingBy(Test::getName,
                                        () -> new TreeMap(Comparator.naturalOrder().reversed()),
                                        Collectors.toList()));

Или:

Map<String, List<Test>> descendingOrder = 
    tests.stream()
         .collect(Collectors.groupingBy(Test::getName,
                                        () -> new TreeMap<>(Collections.reverseOrder()),
                                        Collectors.toList()));
...