首页 / JAVA / java8-详解Lamda表达式
java8-详解Lamda表达式
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java8-详解Lamda表达式,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3289字,纯文字阅读大概需要5分钟。
内容图文
一回顾与说明
通过之前发布的”Java8Lamda和Stream原理引入“一文章中你已经了解了为什么会有Lamda表达式的由来,Lamda表达式的基本语法等;Lamda表达式简而言之:Lamda表达式本质上就是匿名类,我们称Lamda表达式就是函数式接口的实现;
二Lamda表达式的结构与函数式接口的关系
1准备工作
例子还是之前文章关于车的例子
判断型函数式接口:
/**
* @Author lsc
* @Description <p> </p>
* @Date 2019/9/27 14:05
* @Version 1.0
*/
@FunctionalInterface
public interface CarPredicate {
boolean test(Car car);
}
车实体类:
/**
* @Author lsc
* @Description <p> </p>
* @Date 2019/9/27 11:09
* @Version 1.0
*/
@Data
@AllArgsConstructor
public class Car {
// 车牌号
private String code;
// 颜色
private String color;
// 生产商
private String factory;
// 价格
private double price;
}
初始化实例函数:
public List<Car> InitCar(){
ArrayList<Car> carList = new ArrayList<>();
Car car1 = new Car("100", "black", "中国", 20);
Car car2 = new Car("101", "gray", "中国", 30);
Car car3 = new Car("102", "yello", "中国", 50);
Car car4 = new Car("103", "silvery", "英国", 20);
Car car5 = new Car("104", "red", "英国", 30);
carList.add(car1);
carList.add(car2);
carList.add(car3);
carList.add(car4);
carList.add(car5);
return carList;
}
根据条件获得车函数:
public List<Car> getCarByPredicate(List<Car> carList, CarPredicate carPredicate){
ArrayList<Car> resultList = new ArrayList<>();
for (Car car : carList){
if (carPredicate.test(car)){
resultList.add(car);
}
}
return resultList;
}
2 Lamda 的结构
我们之前用Lamda是这样调用:
@Test
public void getCarByPredicatByLamda(){
// 初始化车信息
List<Car> cars = carFunFactory.InitCar();
// 获取颜色为红色的车
List<Car> carByPrice1 = carFunFactory.getCarByPredicate(cars,car -> car.getPrice()>30);
// [Car(code=102, color=yello, factory=中国, price=50.0)]
System.out.println(carByPrice1);
}
图解Lamda 结构
3 Lamda与函数式接口的关系与类型推断
再次强调:Lamda表达式是对函数式接口的实现
类型?推断:
类型推断void:?
// void 兼容 Lamda一句表达式的函数签名
@Test
public void runnableTest(){
Runnable runnable = () -> System.out.println("欢迎关注youku1327");
runnable.run();
}
图解void类型推断?:
没有类型推断:
三内置函数式接口
1 Predicate<T>
java.util.function.Predicate;函数签名:boolean test(T t);
我们可以实现的Lamda函数签名:T -> boolen;
示例:
@Test
public void predicateTest(){
Predicate predicate = s -> s.equals("youku1327");
boolean youku1327 = predicate.test("youku1327");
System.out.println(youku1327);//true
}
2 Consumer<T>
java.util.function.Consumer;函数签名: void accept(T t);
我们可接受的Lamda函数签名:T -> void;
@Test
public void consumerTest(){
Consumer consumer = s -> System.out.println(s);
consumer.accept("youku1327");//youku1327
}
3Function<T, R>
java.util.function.Function;函数签名?:R apply(T t);
我们可接受的Lamda函数签名:T -> R;?
@Test
public void functionTest(){
ArrayList<Object> list = new ArrayList<>();
Function function = s -> list.add(s);
function.apply("youku1327");
System.out.println(list);//[youku1327]
}
4 Supplier<T>
java.util.function.Supplier;函数签名: T get();
我们可以接受的Lamda函数签名: void -> T
@Test
public void supplierTest(){
ArrayList<Object> list = new ArrayList<>();
Supplier supplier = () -> "youku1327";
System.out.println(supplier.get());//youku1327
}
四 致谢
感谢观看Lamda与函数式接口的入门原理篇,有梦想的程序员,学技术不仅学使用方法,还要学原理,你将技术当工具,技术何尝不是把你当工具,想要系统学习快关注我的公众号吧;
内容总结
以上是互联网集市为您收集整理的java8-详解Lamda表达式全部内容,希望文章能够帮你解决java8-详解Lamda表达式所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。