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