Given:



public class Emp {

    String fName;
    String lName;

    public Emp(String fn, String ln) {
        fName = fn;
        lName = ln;
    }

    public String getfName() {
        return fName;
    }

    public String getlName() {
        return lName;
    }
}

and the code fragment:

List<Emp> emp = Arrays.asList(
        new Emp("John", "Smith"),
        new Emp("Peter", "Sam"),
        new Emp("Thomas", "Wale"));
emp.stream()
        //line n1
        .collect(Collectors.toList());

Which code fragment, when inserted at line n1, sorts the employees list in descending order of fName and then ascending order of lName?

A.

.sorted(Comparator.comparing(Emp::getfName).reversed().thenComparing(Emp::getlName))

B.

.sorted(Comparator.comparing(Emp::getfName).thenComparing(Emp::getlName))

C.

.map(Emp::getfName).sorted(Comparator.reverseOrder())

D.

.map(Emp::getfName).sorted(Comparator.reserveOrder().map(Emp::getlName).reserved

題解

選項A,正確答案。

選項B,fName和lName都是遞增排序,不合題目要求。

選項C,用map方法會替換掉原本的元素,所以會只剩下遞減排序的fName。

選項D,編譯錯誤,串流在經過第一次map方法之後,其元素就是字串物件而不是Emp物件了。