Map<String, List> groups = persons.stream()
.collect(Collectors.groupingBy(Person::getCountry));
Person的getCountry方法和Function的apply方法,参数和返回值也不一致呀
ambda表达式方法引用的场景有:
1. 当lambda表达式的功能是直接调用一个方法的时候,可以使用方法引用来替换lambda表达式。
例如:
java
// lambda表达式
(x) -> Math.max(x, 10)
// 方法引用
Math::max
2. 当lambda表达式的功能是对一个对象调用实例方法的时候,可以使用方法引用来替换lambda表达式。
例如:
java
// lambda表达式
p -> p.getName()
// 方法引用
Person::getName
3. 当lambda表达式的功能是对一个类的静态方法进行调用的时候,可以使用方法引用来替换lambda表达式。
例如:
java
// lambda表达式
(x, y) -> Math.max(x, y)
// 方法引用
Math::max
4. 当lambda表达式的功能是调用一个构造方法创建对象的时候,可以使用方法引用来替换lambda表达式。
例如:
java
// lambda表达式
() -> new Person()
// 方法引用
Person::new
所以在你的例子中:
java
Map<String, List> groups = persons.stream()
.collect(Collectors.groupingBy(Person::getCountry));
Person::getCountry就是方法引用,替代了lambda表达式p -> p.getCountry()。
getCountry 返回的应该是String吧,这里apply的形参也是String,可以通过 Map<String, List> 这个的key的类型来推断。