Given the definition of the Emp class:
public class Emp {
private String eName;
private Integer eAge;
Emp(String eN, Integer eA) {
this.eName = eN;
this.eAge = eA;
}
public Integer getEAge() {
return eAge;
}
public String getEName() {
return eName;
}
}
and code fragment:
List<Emp> li = Arrays.asList(new Emp("Sam", 20), new Emp("John", 60), new Emp("Jim", 51));
Predicate<Emp> agVal = s -> s.getEAge() > 50; //line n1
li = li.stream().filter(agVal).collect(Collectors.toList());
Stream<String> names = li.stream().map(Emp::getEName); //line n2
names.forEach(n -> System.out.print(n + " "));
What is the result?
A.
Sam John Jim
B.
John Jim
C. A compilation error occurs at line n1.
D. A compilation error occurs at line n2.
題解
程式第32行,串流物件的filter方法可以保留符合條件的元素,collect方法可以將串流物件再轉成別的Collection物件,配合Collectors類別的toList方法可以將串流物件中的元素清單化,轉成List物件。至於元素在新的List物件中的順序就是原先集合物件的走訪順序,所以「Emp("John", 60)」在「Emp("Jim", 51)」之前。所以轉出來的List物件元素為,「Emp("John", 60), Emp("Jim", 51)」。
程式第33行,使用串流物件的map方法取代原本的元素。
程式第34行,輸出「John Jim 」。