Java新特性-Lambda表达式入门
2017-08-18 09:03
531 查看
假设我们现在来写一个依据不同属性来筛选苹果的方法,代码如下:
Predicate接口代码如下:
筛选方法:
调用filterApples方法,代码如下:
不足之处:随着筛选条件的增加,实现接口的类越来越多
不足之处:模板化代码太多,核心代码就一句:“green”.equals(apple.getColor());
分析:
上面代码中的filterApples方法,其中有一个为Predicate接口类型的参数,传入这个接口的引用,实质上是为了调用Predicate接口里的方法,现在由于Predicate接口中只有一个方法,即test方法.所以传入这个接口的引用参数实质上是为了调用Predicate接口中的test方法.这里使用的Lambda表达式,其实就是重写filterApples接口中的test方法.使用Lambda表达式直接实现了代码的传递,从而达到了行为参数化的目的
Predicate接口代码如下:
package java8Test; /** * * @ClassName: Predicate * @Description:函数式接口:就是只定义一个抽象方法的接口 * @author cheng * @date 2017年8月17日 上午9:00:59 */ @FunctionalInterface public interface Predicate<T> { boolean test(T t); }
筛选方法:
/** * * @Title: filterApples * @Description: 筛选方法 * @param inventory * @param p * @return */ public static List<Apple> filterApples(List<Apple> inventory, Predicate<Apple> p) { List<Apple> result = new ArrayList<Apple>(); for (Apple apple : inventory) { if (p.test(apple)) {//调用接口中的方法 result.add(apple); } } return result; }
第一种方式:实现接口
实现Predicate接口,代码如下:package java8Test; /** * * @ClassName: AppleColorPredicate * @Description:筛选苹果颜色 * @author cheng * @date 2017年8月17日 下午5:20:17 */ public class AppleColorPredicate implements Predicate<Apple> { /** * 筛选颜色 */ @Override public boolean test(Apple apple) { return "green".equals(apple.getColor()); } }
调用filterApples方法,代码如下:
filterApples(inventory, new AppleColorPredicate());
不足之处:随着筛选条件的增加,实现接口的类越来越多
第二种方式:匿名内部类
直接使用匿名内部类,代码如下:filterApples(inventory, new Predicate<Apple>() { /** * 重写test方法 */ @Override public boolean test(Apple apple) { return "green".equals(apple.getColor()); } });
不足之处:模板化代码太多,核心代码就一句:“green”.equals(apple.getColor());
第三种方式:Lambda表达式
使用Lambda表达式,代码如下:filterApples(inventory, (Apple apple) -> "green".equals(apple.getColor()));
分析:
上面代码中的filterApples方法,其中有一个为Predicate接口类型的参数,传入这个接口的引用,实质上是为了调用Predicate接口里的方法,现在由于Predicate接口中只有一个方法,即test方法.所以传入这个接口的引用参数实质上是为了调用Predicate接口中的test方法.这里使用的Lambda表达式,其实就是重写filterApples接口中的test方法.使用Lambda表达式直接实现了代码的传递,从而达到了行为参数化的目的
相关文章推荐
- Java8新特性之forEach+Lambda 表达式遍历Map和List
- JAVA8中Lambda表达式入门
- 初看Java8新特性-Lambda表达式(二)
- Java Lambda表达式入门
- Java 8 新增特性Lambda表达式
- JDK1.8新特性(二)Lambda表达式入门
- java8新特性 lambda表达式
- java8新特性学习笔记(一) Lambda表达式
- java8:Lambda表达式入门
- Java8 新特性之一---------Lambda表达式和函数式接口
- JavaSE_8系列博客——Java8的新特性(一)--Lambda表达式(1)--宏观把控
- java Lambda表达式入门
- Java Lambda表达式入门
- java8新增特性(一)---Lambda表达式
- JAVA 8入门(一)Lambda表达式
- java8新特性 Lambda表达式详解
- java8 新特性-Lambda 表达式
- Java Lambda表达式入门
- Java 8 新特性之 Lambda 表达式
- Java 8 新特性:Lambda 表达式之方法引用(Lambda 表达式补充版)