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