Java8 Lambda

Lambda 实例

  1. 无参,无返回值
// 以前的写法
Runnable runnable = new Runnable() {
    @Override
    public void run() {
        System.out.println("无参无返回值");
    }
};
// lambda 的写法
Runnable runnable1 = () -> System.out.println("无参无返回值");
  1. 有一个参数,无返回值
Consumer<String> consumer = x -> System.out.println(x);
consumer.accept("有一个参数,没有返回值");
  1. 有两个参数,返回int
Comparator<Integer> comparator = (x, y) -> {
    System.out.println("有两个参数,有返回值");
    return x.compareTo(y);
};
int compare = comparator.compare(5, 4);

方法引用的三种语法格式

Lambda 体中调用方法的参数列表与返回值类型,要与函数式接口中抽象方法的函数列表和返回值类型保持一致。

  1. 对象::实例方法
// 1
PrintStream printStream = System.out;
Consumer<String> consumer = printStream::println;
// 2
UserTest userTest = new UserTest(1,"李四");
Supplier<Integer> supplier = userTest::getId;
supplier.get();
  1. 类::静态方法
Comparator<Integer> comparator = Integer::compare;
int compare = comparator.compare(3, 5);
  1. 类::实例方法
    参数列表的第一个参数是实例方法的调用者,第二参数是实例方法的参数时,可以用ClassName::method的方式。
BiPredicate<String, String> biPredicate = String::equals;

构造器引用

  1. 无参构造
// 调用无参构造函数
Supplier<UserTest> supplier = UserTest::new;
  1. 有参构造
// 调用有两个参数的有参构造
BiFunction<Integer, String, UserTest> function = UserTest::new;
  1. 数组引用
// 以前的做法
Function<Integer, String[]> function1 = (x) -> new String[x];
String[] apply = function1.apply(10);
// 现在的做法
Function<Integer, String[]> function2 = String[]::new;
String[] apply1 = function2.apply(10);
原文地址:https://www.cnblogs.com/Godfunc/p/9208962.html