(Comparator<T> & Serializable)的作用

Comparator接口的静态方法如下

lambda表达式:(c1, c2) -> keyExtractor.apply(c1).compareTo(keyExtractor.apply(c2))

(Comparator<T> & Serializable)作为lambda表达式实现的接口,也可以这样理解:

lambda表达式相当于构造了一个匿名内部类的对象,而这个匿名内部类实现了Comparator<T>以及Serializable接口。

此时会感到疑问,实现了接口不是也需要实现它们的抽象方法吗。没错,Comparator接口是一个函数式接口,它只有一个抽象方法、一些静态方法以及一些默认方法,而接口的静态方法是不需要我们实现的,接口的默认方法我们可以选择不去实现。而Serializable接口中没有任何方法。

为了印证我们的猜想我编写了一段代码:

@SpringBootTest
public class MyTest {
    public static void main(String[] args) {
        D d = (D & C) (one, two) -> one + two;
        Class<? extends D> aClass = d.getClass();//获取匿名内部类的class
        System.out.println(aClass.getName());//获取这个匿名内部类的名字
        System.out.println(C.class.isAssignableFrom(aClass));//判断这个匿名内部类是否实现了接口C
        System.out.println(D.class.isAssignableFrom(aClass));//判断这个匿名内部类是否实现了接口D
    }
}
interface C {
}
@FunctionalInterface
interface D {
    String hello(String one, String two);

    default String hh() {
        return "";
    }
}

测试结果如下 ,的确实现了这两个接口

com.jx.ldw.MyTest$$Lambda$1/1910163204
true
true 

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是使用`Comparator`接口实现分数排序的示例代码: 假设有一个`Student`类,其中包含学生的姓名和分数信息: ```java public class Student { private String name; private int score; public Student(String name, int score) { this.name = name; this.score = score; } public String getName() { return name; } public int getScore() { return score; } } ``` 现在,我们可以使用`Comparator`接口来实现按照分数从高到低排序。示例代码如下: ```java import java.util.*; public class ScoreSorter { public static void main(String[] args) { List&lt;Student&gt; students = new ArrayList&lt;&gt;(); students.add(new Student(&quot;Alice&quot;, 90)); students.add(new Student(&quot;Bob&quot;, 80)); students.add(new Student(&quot;Charlie&quot;, 70)); students.add(new Student(&quot;David&quot;, 85)); // 使用 Comparator 接口实现分数排序 Collections.sort(students, new Comparator&lt;Student&gt;() { @Override public int compare(Student s1, Student s2) { return s2.getScore() - s1.getScore(); } }); // 输出排序结果 for (Student student : students) { System.out.println(student.getName() + &quot; : &quot; + student.getScore()); } } } ``` 在上面的代码中,我们使用`Collections.sort`方法对学生列表进行排序,第二个参数传入一个实现了`Comparator`接口的匿名内部类。在该匿名内部类中,我们实现了`compare`方法来比较两个学生的分数大小,从而实现分数从高到低排序。 注意,这里的`compare`方法返回的是正数、负数或0,用于表示两个元素的相对大小关系。如果返回正数,表示`s2`大于`s1`;如果返回负数,表示`s1`大于`s2`;如果返回0,表示`s1`和`s2`相等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值