Administrator
发布于 2020-12-23 / 1156 阅读 / 0 评论 / 0 点赞

Java8之Lambda表达式

Java8之Lambda表达式

第三章、Lambda表达式

1、基础概念

image-20200925101009761

  • Before
Comparator<Apple> byWeight = new Comparator<Apple>() {
     public int compare(Apple a1, Apple a2){
     return a1.getWeight().compareTo(a2.getWeight());
     }
}; 
  • After
Comparator<Apple> byWeight =
(Apple a1, Apple a2) -> a1.getWeight().compareTo(a2.getWeight()); 
  • java中有效的Lambda表达式
//第一个Lambda表达式具有一个String类型的参数并返回一个int。Lambda没有return语句,因为已经隐含了return
(String s) -> s.length()
//第二个Lambda 表达式有一个 Apple 类型的 参数并返回一 个boolean(苹 果的重量是否 超过150克)
(Apple a) -> a.getWeight() > 150
//第三个Lambda表达式具有两个int类型的参数而没有返回值(void返回)。注意Lambda表达式可以包含多行语句,这里是两行
(int x, int y) -> {
 System.out.println("Result:");
 System.out.println(x+y);
}
//第四个Lambda表达式没有参数,返回一个int
() -> 42
//第五个Lambda表达式具有两个Apple类型的参数,返回一个int:比较两个Apple的重量
(Apple a1, Apple a2) -> a1.getWeight().compareTo(a2.getWeight())
    
    
() -> {}
() -> "Raoul"
() -> {return "Mario";}
  • 使用案例
//布尔表达式 
(List<String> list) -> list.isEmpty()
//创建对象 
() -> new Apple(10)
//消费一个对象 
(Apple a) -> {
 	System.out.println(a.getWeight());
}
//从一个对象中选择/抽取 
(String s) -> s.length()
//组合两个值 
(int a, int b) -> a * b
//比较两个对象 
(Apple a1, Apple a2) -> a1.getWeight().compareTo(a2.getWeight()) 

2、函数式接口

  • 一言以蔽之,函数式接口就是只定义一个抽象方法的接口。
  • 比如

image-20200925102310159

  • @FunctionalInterface注解是标注这个类是函数式接口类,通常只做标识提醒用,无任何其他实质性的作用,@FunctionalInterface不是必需的,但对于为此设计的接口而言,使用它是比较好的做法。它就像是@Override 标注表示方法被重写了。

  • 为了总结关于函数式接口和Lambda的讨论,表总结了一些使用案例、Lambda的例子,以 及可以使用的函数式接口。

image-20200925142452842


评论