[問題] 關於method refrence

作者: HiItsMe (Hello)   2020-11-17 22:03:05
問題參考:https://magiclen.org/ocpjp-collection-sort/
關於下列程式碼,兩個問題想請問版上的高手們:
問題1:於下列程式碼註解line n1處,s -> s.getEAge() > 50為何無法使用method
refrence? (Emp::getEAge) > 50
問題2:於下列程式碼註解line n2處,map(Emp::getEName)為何不會編譯錯誤?
就小的理解使用method refrence時,其中之一的用法ClassName::StaticMethod
,故getEName應該必須為static method?
先謝謝版上高手回覆!
class Emp {
private String eName;
private int eAge;
Emp(String eN, Integer eA) {
this.eName = eN;
this.eAge = eA;
}
public int getEAge() {
return eAge;
}
public String getEName() {
return eName;
}
}
public class Test809 {
public static void main(String[] args) {
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 + " "));
}
}
作者: ssccg (23)   2020-11-18 09:44:00
1.完整來說那段是 (Emp s) -> { s.getEAge() > 50; }*漏了 return你覺得可以亂拆一段出來?2.ClassName::Method沒有一定要static,非static的話解析出的Function會多一個ClassName參數Emp::getName的type相當於Function<Emp,String>另外第一個其實不是不能用method reference,是不能像你問的這樣組合method reference expression不是lambda expression只是兩種都會解析成functional interface的instance

Links booklink

Contact Us: admin [ a t ] ucptt.com