Uma*_*hid 5 java function java-8 method-reference
public static void main(String o[]) {
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("a", 1);
map.entrySet().stream().sorted(Comparator.comparing(Entry::getValue)).forEach(System.out::println);
}
Run Code Online (Sandbox Code Playgroud)
上面的代码构建和运行完美但不应该.Comparator.comparing采用函数引用,只有那些接受一个参数并返回一个参数的方法才能映射到此.但是在上面的代码中,getValue被映射并且工作正常但它不带任何参数.代码应该给出构建问题,但不是.我的概念有什么问题吗?
单参数comparing方法:
public static <T, U extends Comparable<? super U>> Comparator<T> comparing(
Function<? super T, ? extends U> keyExtractor)
Run Code Online (Sandbox Code Playgroud)
接受一个Function<? super T, ? extends U>参数,这是一个包含单个方法的函数接口,该方法接受一种类型的参数并返回其他类型的值.
Entry::getValue接受一种类型的参数(Map.Entry<String, Integer>在您的示例中)并返回其他类型的值(Integer在您的示例中).因此它匹配Function功能接口.
但是在上面的代码中,getValue被映射并且工作正常但它不带任何参数.
是的它 - Map.Entry从Stream服务中取出的每个元素作为接口apply()方法的参数Function.
也许这将澄清:
Function<Map.Entry<Integer, String>, String> func = Map.Entry::getValue;
Run Code Online (Sandbox Code Playgroud)
可以将该getValue()方法Map.Entry视为Function接受Map.Entry实例并返回该实例的值(通过调用getValue()该实例返回).
| 归档时间: |
|
| 查看次数: |
110 次 |
| 最近记录: |