Comparator
在Java8之前的版本我们应该也使用过关于Comparator吧!Comparator就是一个比较器,比较两个元素的大小。我们在对集合进行排序的时候,就需要一个比较器来对集合中的元素进行比较,才能进行排序。
* @since 1.2
*/
@FunctionalInterface
public interface Comparator<T> {
}
通过这段源代码就可以发现,Comparator比较器是从Java2就有啦。但是自从JDK8开始,该接口就变为一个函数式接口,并且在JKD8对Comparator进行了增强(增加了一些默认方法和静态方法),既然Comparator成为一个函数式接口,那么该接口中的唯一一个抽象方法是什么呢?
int compare(T o1, T o2);
该方法就是Comparator比较器的核心:比较。该方法接收两个参数,并返回一个整形。如果返回的数据大于0就证明o1比o2大,返回0就证明o1和o2相等,返回小于0就证明o1比o2小。
- 例子1:创建一个字符串集合,并对集合中的元素进行排序。
public class ComparatorTest {
public static void main(String[] args) {
List<String> list = Arrays.asList("hello","world","nihao","wohao","welcome");
list.sort((item1,item2)->item2.length()-item1.length());
System.out.println(list);
}
}
通过这个示例代码可以知道,我们是对集合中的元素按元素的长度进行降序排列。我们通过Comparator进行改造:
public class ComparatorTest {
public static void main(String[] args) {
List<String> list = Arrays.asList("hello","world","nihao","wohao","welcome");
list.sort(Comparator.comparingInt(String::length).reversed());
System.out.println(list);
}
}
改成该种方式的代码也能完成相同的功能。那么我们将上面的代码中的方法引用改成lambda表达式,看能出现什么情况呢&