Lambda和Comparator

什么是Lambda表达式?

答:用于创建(实例化)函数式接口对象的一种新语法。函数式接口,指的是只有一个抽象方法的接口。

在学习的过程中发现Comparator接口中不止一个方法,但是也可以使用Lambda表达式,因此本文是对该问题的学习和记录。

 

@FunctionalInterface
public interface Comparator {

    int compare(T o1, T o2);

    boolean equals(Object obj);

    default Comparator reversed() {
        return Collections.reverseOrder(this);
    }

    default Comparator thenComparing(Comparator other) {
        Objects.requireNonNull(other);
        return (Comparator & Serializable) (c1, c2) -> {
            int res = compare(c1, c2);
            return (res != 0) ? res : other.compare(c1, c2);
        };
    }
   //后面省略
}
  • @FunctionalInterface注解

新注解,用来标注这是一个“方法接口”,即一个接口中只有一个方法去实现

  • default关键字

在一个被@FunctionalInterface标注的接口中,可以用这个关键字来区分“方法接口”想要在lambda表达式中起作用的方法不会起作用的方法 

Comparator中的equals方法和Object中的重复了,而Object是任何类的父类,所以不管任何实现Comparator的类都有继承自Object的equals方法的实现,所以可以使用Lambda表达式,示例代码如下:

Integer[] sums = {2,1,3,0,5};
Arrays.sort(sums,  	(o1,o2) -> {return  o1.compareTo(o2);});

 

JDK 1.8之前已有的函数式接口:

 

•    java.lang.Runnable

•    java.util.concurrent.Callable

•    java.security.PrivilegedAction

•    java.util.Comparator

•    java.io.FileFilter

•    java.nio.file.PathMatcher

•    java.lang.reflect.InvocationHandler

•    java.beans.PropertyChangeListener

•    java.awt.event.ActionListener

•    javax.swing.event.ChangeListener

 

JDK1.8中定义的函数式接口:

       

•     java.util.function包中

你可能感兴趣的:(技术)