2019年9月30日 星期一

讀者釋疑 20190930

書籍:

Java SE8 OCPJP進階認證指南

疑問:

您好,我是購買OCP進階認證的讀者
想請教幾件事情

書中15-30的例子

Map的排序是根據丟進去的順序
但是15-60的考題11
為什麼這時候是根據字母順序排列方式?

另外15-69的考題23

我自己測試答案是A

但我主要還是想搞懂groupingBy他在分組的時候是怎麼排序?

因為有的時候他是照放進去的順序
有時候又是根據字母排序
然後15-69又是根據先丟進去的排最後
我該如何判斷?

回覆:

方法回傳型態是Map,原本就無法排序,因此順序不固定。
若要排序,以範例 /OCP/src/course/c16/streamBasic/TerminalOperationCollectDemo.java 的方法 testGroupingBy() 為例,

原本為:
.collect(Collectors.groupingBy(classifier));

需改為:
.collect(Collectors.groupingBy(classifier, TreeMap::new, Collectors.toList()));

如下:
public static void testGroupingBy() {
    Function<Person, Integer> classifier = p -> p.age;
    Map<Integer, List<Person>> personsByAge =
        getPersonList().stream()
    //  .collect(Collectors.groupingBy(classifier));
        .collect(Collectors.groupingBy(classifier, TreeMap::new, Collectors.toList()));
    personsByAge.forEach(
        (age, personList) ->
                System.out.format("age %s: %s\n", age, personList)
    );
}

沒有留言:

張貼留言