java8 参数_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 filterApples(List inventory, ApplePredicate p) {

List result = new ArrayList();

for (Apple apple : inventory) {

if (p.test(apple)) {

result.add(apple);

}

}

return result;

}

/**

* 匿名类实现

* @param inventory

* @return

*/

public List redApples(List inventory) {

return filterApples(inventory, new ApplePredicate() {

@Override

public boolean test(Apple apple) {

return "red".equals(apple.getColor());

}

});

}

/**

* 使用Lambda表达式

* @param inventory

* @return

*/

public List yellowApples(List inventory) {

return filterApples(inventory, (Apple apple) -> "yellow".equals(apple.getColor()));

}

}

List类型抽象化:public interface CommonPredicate {

/**

* 类型抽象化

* @param t

* @return

*/

boolean test(T t);

}public class filter {

/**

* list类型抽象化

* @param list

* @param p

* @param 

* @return

*/

public static  List filter(List list, CommonPredicate p) {

List result = new ArrayList();

for (T e : list) {

if (p.test(e)) {

result.add(e);

}

}

return result;

}

public List redApples(List inventory) {

return filter(inventory, (Apple apple) -> "red".equals(apple.getColor()));

}

public List main(List inventory) {

return filter(inventory, (Integer i) -> i % 2 == 0);

}

}

行为参数化类似于策略设计模式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值