JavaJDK1.8新特性lambda表达式与方法引用-创新互联
Lambda表达式标准格式
标题名称:JavaJDK1.8新特性lambda表达式与方法引用-创新互联
分享链接:http://scjbc.cn/article/ceidii.html
(参数列表) ->{方法体
}
Lambda表达式省略格式(int arg) ->{return new Object();
}
// 省略规则
// 规则 1 小括号内参数的类型可以省略
(arg) ->{return new Object();
}
// 规则 2 如果小括号内有且仅有一个参数,则小括号可以省略
arg ->{return new Object();
}
// 规则 3 如果大括号内有且仅有一个语句,可以同时省略大括号,return关键字,语句分号
arg ->new Object()
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://scjbc.cn/article/ceidii.html