Lambda 实例
- 无参,无返回值
// 以前的写法Runnable runnable = new Runnable() { @Override public void run() { System.out.println("无参无返回值"); }};// lambda 的写法Runnable runnable1 = () -> System.out.println("无参无返回值");
- 有一个参数,无返回值
Consumerconsumer = x -> System.out.println(x);consumer.accept("有一个参数,没有返回值");
- 有两个参数,返回int
Comparatorcomparator = (x, y) -> { System.out.println("有两个参数,有返回值"); return x.compareTo(y);};int compare = comparator.compare(5, 4);
方法引用的三种语法格式
Lambda 体中调用方法的参数列表与返回值类型,要与函数式接口中抽象方法的函数列表和返回值类型保持一致。
- 对象::实例方法
// 1PrintStream printStream = System.out;Consumerconsumer = printStream::println;// 2UserTest userTest = new UserTest(1,"李四");Supplier supplier = userTest::getId;supplier.get();
- 类::静态方法
Comparatorcomparator = Integer::compare;int compare = comparator.compare(3, 5);
- 类::实例方法 参数列表的第一个参数是实例方法的调用者,第二参数是实例方法的参数时,可以用ClassName::method的方式。
BiPredicatebiPredicate = String::equals;
构造器引用
- 无参构造
// 调用无参构造函数Suppliersupplier = UserTest::new;
- 有参构造
// 调用有两个参数的有参构造BiFunctionfunction = UserTest::new;
- 数组引用
// 以前的做法Functionfunction1 = (x) -> new String[x];String[] apply = function1.apply(10);// 现在的做法Function function2 = String[]::new;String[] apply1 = function2.apply(10);