Dùng method có sẵn làm lambda với method reference
Lambda là một cách để viết implementation cho functional interface khá là tiện rồi. Tuy nhiên, đôi lúc bạn sẽ thấy nếu chỉ dùng lambda thì hơi bị rườm rà, trong khi method có sẵn rồi. Lúc này method reference sẽ phát huy tác dụng.
1. Giới thiệu sơ lư...
tonghoangvu-archived.hashnode.dev3 min read
Về chỗ mình bị confuse trong bài, là chỗ method reference tới instance với static method ấy, tóm lại là như này.
Với reference tới static method, thì chỉ có match lambda param vào đúng với method param.
class Test { public static checkAge(int age) { return age > 18; } } ... // Lambda có 1 param, ứng với checkAge() có 1 param Predicate<Integer> check = Test::checkAge;Nhưng khi reference tới instance method, sẽ có 2 trường hợp sau:
Lấy ví dụ nhé cho dễ hiểu hai trường hợp trên.
// Trường hợp 1 class Test { public int length(String str) { return str.length; } } ... // Trường hợp 1 dùng object bên ngoài // Thì lambda param sẽ đưa vô trong method param luôn Function<String, Integer> getLength = new Test()::length; // Trường hợp 2 dùng tên class của lambda param // Lambda param sẽ làm luôn object, gọi method không có param Function<String, Integer> getLength = String::length;Đấy, đó chính là lý do mình bị confuse (và maybe nhiều bạn cũng thế). Hi vọng Java sẽ bổ sung syntax mới rõ ràng hơn ở chỗ này.