【Java 8实战】第2篇:Lambda表达式

发布时间:2019-11-19 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了【Java 8实战】第2篇:Lambda表达式脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

什么是Lambda表达式

Lambda表达式可以理解为是一种匿名函数:它没有名称,但有参数列表、函数主体、返回类型,可能还有一个可以抛出的异常的列表。

Lambda表达式语法

(parameters) -> exPRession 或者 (parameters) -> {statements;}
Lambda有效语法举例

1.布尔表达式

(List<String> list) -> list.isEmpty()

2.创建对象

() -> new Apple("苹果")

3.使用一个对象

(Apple a) -> {System.out.println(a.getName());}

4.比较两个对象

(Apple a,Apple b) -> a.getName().compareTo(b.getName())

那些地方可以使用Lambda

函数式接口

函数式接口就是只定义了一个抽象方法的接口;比如Java中的Comparator、Runnable、Callabel接口。含有多个 Extension Methods 的接口也属于函数式接口。


1.Lambda表达式允许你直接以内联的形式为函数式接口的抽象方法提供实现,并把整个表达式作为函数式接口的实例。你也可以使用匿名内部类来完成同样的事情,只不过比较麻烦。如下示例:

 public static void main(String[] args) {         /**          * 利用Ruunable接口run方法打印数据。一个类,实现Runnable接口,          * 这个类可以做很多事情,不仅仅只被用于线程,也可以用于其他功能!          */                 /*lambda表达式*/         Runnable run = () -> System.out.println("hello lambda");         /*匿名内部类*/         Runnable run2 = new Runnable() {             @Override             public void run() {                 System.out.println("hello inner class");             }         };          process(run);         process(run2);     }      public static void process(Runnable runnable) {         runnable.run();     }

通过代码我们可以知道,Lambda表达式的签名要和函数式接口的抽象方法签名一致;

使用函数式接口


在JDK1.8中你会发现,函数式接口都带有@FunctionalInterface注解,表示该接口是函数式接口,如果你用了该注解但接口又不是函数式接口,编译器就会报错。


在JDK1.6中我们常见的函数式接口有ComparatorRunnableCallable等。在JDK1.8的java.util.function包中引入新的函数式接口,我们重点介绍一下泛型式函数接口PredicateConsumerFunction


1. Predicate

接口定义了一个test抽象方法,它的作用就是判断入参的行为和某已知的参数行为是否匹配。除此之外,接口中还有 ```and``````or```等默认方法。 @FunctionalInterface public interface Predicate<T> {     boolean test(T t); }

如何使用Predicate接口,比如说如何挑选红色苹果为例说明

1.苹果过滤实现

public class FilterApple {      public static <T> List<T> filterApple(List<T> lists,                                           Predicate<T> p) {         List<T> result = new ArrayList<>();         for (T t : lists) {             if (p.test(t)) {                 result.add(t);             }         }         return result;     } }

2.测试

/*测试*/ public static void main(String[] args) {         Apple a = new Apple();         a.setColor("green");          Apple b = new Apple();         b.setColor("red");          List<Apple> list = new ArrayList<>();         list.add(a);         list.add(b);          /*使用lambda表达式定义苹果过滤规则*/         Predicate<Apple> lambdaPredicate = (Apple apple) -> "red".equals(apple.getColor());         list = FilterApple.filterApple(list, lambdaPredicate);                  System.out.println(list.toString()); //[Apple(color=red, weight=0, area=null)]     }

脚本宝典总结

以上是脚本宝典为你收集整理的【Java 8实战】第2篇:Lambda表达式全部内容,希望文章能够帮你解决【Java 8实战】第2篇:Lambda表达式所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。