JavaJDK1.8新特性lambda表达式与方法引用-创新互联

Lambda表达式标准格式
(参数列表) ->{方法体
}
Lambda表达式省略格式
(int arg) ->{return new Object();
}

// 省略规则
// 规则 1 小括号内参数的类型可以省略
(arg) ->{return new Object();
}

// 规则 2 如果小括号内有且仅有一个参数,则小括号可以省略
arg ->{return new Object();
}

// 规则 3 如果大括号内有且仅有一个语句,可以同时省略大括号,return关键字,语句分号
arg ->new Object()
Lambda表达式前提条件
  1. 方法的参数或变量的类型是接口
  2. 接口中只能有一个抽象方法
Lambda代码冗余

当我们在表达式中调用外部的函数时,那我们的表达式就会显得非常多余,这时我们就可以通过方式二的写法,也就是方法引用,更进一步的优化lambda表达式

成都创新互联公司服务项目包括洮南网站建设、洮南网站制作、洮南网页制作以及洮南网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,洮南网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到洮南省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!
// 方式一
public class LambdaIntro {public static void getMaxNum(int[] arr) {System.out.println(Arrays.stream(arr).max().getAsInt());
    }

    public static void main(String[] args) {printMax((int[] arr) ->{getMaxNum(arr);
        });
    }

    public static void printMax(Consumerconsumer){int[] arr = {1, 3, 4, 5};
        consumer.accept(arr);
    }
}
// 方式二
public static void main(String[] args) {printMax(LambdaIntro::getMaxNum);
}
方法引用的语法
// 对象::实例方法 为了方便观看,以下lambda均未简化
// 注意事项: 被引用的方法,参数与返回值要和接口中抽象方法的参数一样
public class LambdaIntro {public static void main(String[] args) {// 冗余写法
        Date date = new Date();
        Suppliersupplier = () ->{return date.getTime();
        };
        System.out.println(supplier.get());
        // 方法引用
        Suppliersupplier1 = date::getTime;
        System.out.println(supplier1.get());
    }
}

// 类名::静态方法
public class LambdaIntro {public static void main(String[] args) {// 冗余写法
        Suppliersupplier = () ->{return System.currentTimeMillis();
        };
        System.out.println(supplier.get());
        // 方法引用
        Suppliersupplier1 = System::currentTimeMillis;
        System.out.println(supplier1.get());
    }
}

// 类名::实例方法
// 注意事项: 实例方法会将第一个参数作为方法的调用者
public class LambdaIntro {public static void main(String[] args) {// 冗余写法
        Functionfunction1 = (String str) ->{  return str.length();
        };
        System.out.println(function1.apply("zhangdy"));
        // 方法引用
        Functionfunction2 = String::length;
        System.out.println(function2.apply("zhangdy"));
    }
}
// 类名::new调用的构造器
@Data
@NoArgsConstructor
@AllArgsConstructor
class Person {private String name;
    private Integer age;
}

public class LambdaIntro {public static void main(String[] args) {// 冗余写法
        Suppliersupplier = () ->{return new Person();
        };
        BiFunctionfunction = (String name, Integer age) ->{return new Person(name, age);
        };
        System.out.println(supplier.get());
        System.out.println(function.apply("zhangdy", 23));
        // 方法引用
        Suppliersupplier2 = Person::new;
        BiFunctionfunction2 = Person::new;
        System.out.println(supplier2.get());
        System.out.println(function2.apply("zhangdy", 23));
    }
}
// 常用数据类型[]::new 调用数组的构造器
public class LambdaIntro {public static void main(String[] args) {// 冗余写法
        Functionfunction = (Integer len) ->{return new String[len];
        };
        String[] apply = function.apply(10);
        System.out.println(apply.length);
        // 方法引用
        Functionfunction2 = String[]::new;
        String[] apply1 = function2.apply(10);
        System.out.println(apply1.length);
    }
}

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


网站栏目:JavaJDK1.8新特性lambda表达式与方法引用-创新互联
新闻来源:http://pwwzsj.com/article/ceidii.html