簡體   English   中英

收藏家分組按插入,升序和降序-Java8

[英]Collectors groupingBy insertion, ascending and descending order - java8

樣本數據

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

如何按降序獲取Map? 例如 ?

HELLO,
FELLOW
ABC

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()));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM