Java8新特性之:行为参数化传递代码
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java8新特性之:行为参数化传递代码相关的知识,希望对你有一定的参考价值。
行为参数化:一个方法接受多个不同的行为(或战略)作为参数,并在内部使用他们,完成不同的行为的能力。
public interface ApplePredicate { /** * 谓词(选择标准) * @param apple * @return */ boolean test(Apple apple); }
public class AppleWeightPredicate implements ApplePredicate{ @Override public boolean test(Apple apple) { return apple.getWeight() > 150; } }
public class AppleGreenColorPredicate implements ApplePredicate{ @Override public boolean test(Apple apple) { return "green".equals(apple.getColor()); } }
public class FilterApples { /** * ApplePredicate参数实现了行为参数化 * @param inventory * @param p * @return */ public static List<Apple> filterApples(List<Apple> inventory, ApplePredicate p) { List<Apple> result = new ArrayList<Apple>(); for (Apple apple : inventory) { if (p.test(apple)) { result.add(apple); } } return result; } /** * 匿名类实现 * @param inventory * @return */ public List<Apple> redApples(List<Apple> inventory) { return filterApples(inventory, new ApplePredicate() { @Override public boolean test(Apple apple) { return "red".equals(apple.getColor()); } }); } /** * 使用Lambda表达式 * @param inventory * @return */ public List<Apple> yellowApples(List<Apple> inventory) { return filterApples(inventory, (Apple apple) -> "yellow".equals(apple.getColor())); } }
List类型抽象化:
public interface CommonPredicate<T> { /** * 类型抽象化 * @param t * @return */ boolean test(T t); }
public class filter { /** * list类型抽象化 * @param list * @param p * @param <T> * @return */ public static <T> List<T> filter(List<T> list, CommonPredicate<T> p) { List<T> result = new ArrayList<T>(); for (T e : list) { if (p.test(e)) { result.add(e); } } return result; } public List<Apple> redApples(List<Apple> inventory) { return filter(inventory, (Apple apple) -> "red".equals(apple.getColor())); } public List<Integer> main(List<Integer> inventory) { return filter(inventory, (Integer i) -> i % 2 == 0); } }
行为参数化类似于策略设计模式。
以上是关于Java8新特性之:行为参数化传递代码的主要内容,如果未能解决你的问题,请参考以下文章