JDK8之Comparator

本文介绍了JDK8中Comparator的变化和增强,它成为函数式接口并增加了默认和静态方法。通过示例展示了如何对集合进行排序,解释了类型推断问题以及如何指定类型避免编译错误。此外,还探讨了比较器如何允许根据父类或接口特性进行比较,并提供了不区分大小写比较的实现方法。
摘要由CSDN通过智能技术生成

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表达式,看能出现什么情况呢&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值