脚本宝典收集整理的这篇文章主要介绍了【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中我们常见的函数式接口有Comparator
、Runnable
、Callable
等。在JDK1.8的java.util.function
包中引入新的函数式接口,我们重点介绍一下泛型式函数接口Predicate
、Consumer
、Function
。
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,请注明来意。