作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
<分区>
我有这段代码,我尝试将方法引用(“String::length”)转换为等效的 lambda 表达式。
Stream<String> s = Stream.of("hello", "your name", "welcome", "z");
List<String> list = s.sorted((a, b) -> Comparator.comparingInt(String::length).compare(a, b)).collect(toList());
// List<String> list = s.sorted((a, b) -> Comparator.comparingInt( p -> {return ((String)p).length();}).compare(a, b)).collect(toList());
注释行中概述了它唯一的工作方式。我需要转换参数“p”。
如果我使用 lambda 表达式并且我需要显式转换,它似乎在编译时将参数“p”的类型指定为对象。见下文:
<Object> Comparator<Object> java.util.Comparator.comparingInt(ToIntFunction<? super Object> keyExtractor)
当我使用 String::length 方法引用时,隐式参数在编译时被正确理解为 String 实例。这种情况有什么特别之处?见下文。
<String> Comparator<String> java.util.Comparator.comparingInt(ToIntFunction<? super String> keyExtractor)
我是一名优秀的程序员,十分优秀!