【Java8新特性】- Lambda表达式( 三 )

运行后会输出hello
helloProcess finished with exit code 0对象方法引入这是一种更为方便的写法 ,  我记得在mybatis-plus使用自带条件查询的时候会用到这种方式 , 以下用简单例子来实现 。java8中提供了public interface Function<T, R>的类 , 这个类也是使用@FunctionalInterface注解 , 可见也是函数式接口 。代码:
// 在car中声明一个方法public class Car {    public String Info() {        return "保时捷 - 帕拉梅拉";    }}// 函数式接口@FunctionalInterfacepublic interface CarInFoService {    String getCar(Car car);}测试采用了三种方式进行比较
public class LambdaTest4 {    public static void main(String[] args) {        System.out.println("**************匿名内部类**************");        CarInFoService carInFoService = new CarInFoService() {            @Override            public String getCar(Car car) {                return car.Info();            }        };        System.out.println(carInFoService.getCar(new Car()));        System.out.println("**************lambda**************");        CarInFoService carInFoService2 = (car) -> car.Info();        System.out.println(carInFoService2.getCar(new Car()));        System.out.println("**************对象方法引入**************");        CarInFoService carInFoService3 = Car::Info;        System.out.println(carInFoService3.getCar(new Car()));        // R apply(T t); T  apply方法传递的参数类型 : R apply 方法返回的类型        Function<String, Integer> function = String::length;        System.out.println(function.apply("lyd_code"));    }}结果

【Java8新特性】- Lambda表达式

文章插图
Lambda表达式遍历通过foreach循环遍历 , forEach实际上需要使用匿名内部类Consumer<? super E> 。
【Java8新特性】- Lambda表达式

文章插图
代码如下
public class LambdaTest5 {    public static void main(String[] args) {        ArrayList<String> list = new ArrayList<>();        list.add("lyd");        list.add("tom");        list.add("jack");        list.forEach(new Consumer<String>() {            @Override            public void accept(String s) {                System.out.println("name: " + s);            }        });        System.out.println("lambda表达式");        /**         * s:遍历链表所得到的元素字符串         */        list.forEach(s -> System.out.println("name: " + s));    }}

经验总结扩展阅读