版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_40646143/article/details/83956018
Closure 闭包 封装特定的业务功能
员工类
//员工类
static class Staff {
private String name;
private double money;
@Override
public String toString() {
return "staff{" +
"name='" + name + '\'' +
", money=" + money +
'}';
}
public Staff() {
}
public Staff(String name, int money) {
this.name = name;
this.money = money;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getMoney() {
return money;
}
public void setMoney(double money) {
this.money = money;
}
}
Closure使用如下
public static void baseic() {
//创建容器
List<Staff> list = new ArrayList<>();
list.add(new Staff("zs", 2000));
list.add(new Staff("lisi", 1000));
list.add(new Staff("www", 3000));
Closure<Staff> closure = new Closure<Staff>() {
@Override
public void execute(Staff s) {
//工资全部上涨1.2
s.setMoney(s.getMoney() * 1.2);
}
};
//工具类 方法已经过时 IterableUtils.forEach取代
//CollectionUtils.forAllDo(list, closure);
IterableUtils.forEach(list, closure);
//循环输出
list.stream().forEach(System.out::println);
}
IfClosure的简单使用
创建商品实体
package com.hp.common;
/**
* 商品实体类
*/
public class Goods {
private String name;
private double price;
//是否打折
private boolean discount;
public Goods(String name, double price, boolean discount) {
this.name = name;
this.price = price;
this.discount = discount;
}
public Goods(){}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public boolean isDiscount() {
return discount;
}
public void setDiscount(boolean discount) {
this.discount = discount;
}
@Override
public String toString() {
return "Goods{" +
"name='" + name + '\'' +
", price=" + price +
", discount=" + discount +
'}';
}
}
IfClosure的简单使用使用如下
//如果商品 打折 则打九折 否则满100 减20
public static void IfClosure() {
List<Goods> list = new ArrayList<>();
list.add(new Goods("javase", 120, true));
list.add(new Goods("c++", 100, false));
list.add(new Goods("c#", 80, false));
//满100 -20
Closure<Goods> closure = new Closure<Goods>() {
@Override
public void execute(Goods input) {
if (input.getPrice() >= 100) {
input.setPrice(input.getPrice() - 20);
}
}
};
//打九折
Closure<Goods> closure1 = new Closure<Goods>() {
@Override
public void execute(Goods input) {
if (input.isDiscount()) {
input.setPrice(input.getPrice() * 0.9);
}
}
};
Predicate<Goods> predicate = new Predicate<Goods>() {
@Override
public boolean evaluate(Goods goods) {
return goods.isDiscount();
}
};
//二选一的操作 IfClosure.ifClosure(断言,为true执行,为false执行)
Closure<Goods> ifClosure = IfClosure.ifClosure(predicate, closure1, closure);
//
IterableUtils.forEach(list, ifClosure);
//循环输出
list.stream().forEach(System.out::println);
}
WhileClosure使用如下
//员工的工资 最低不超过1w 如果超过什么也不变
public static void minimumWage() {
List<Staff> list = new ArrayList<>();
list.add(new Staff("张三", 10000));
list.add(new Staff("李四", 8000));
list.add(new Staff("王五", 5000));
//业务逻辑
Closure<Staff> closure = new Closure<Staff>() {
@Override
public void execute(Staff input) {
input.setMoney(input.getMoney() * 1.2);
}
};
Predicate<Staff> predicate = new Predicate<Staff>() {
@Override
public boolean evaluate(Staff staff) {
return staff.getMoney() < 10000;
}
};
// dolop 为false 先执行,后判断 为true 先判断后执行
Closure<Staff> staffClosure = WhileClosure.whileClosure(predicate, closure, false);
IterableUtils.forEach(list,staffClosure);
//循环
list.stream().forEach(System.out::println);
}
扫描二维码关注公众号,回复:
4021347 查看本文章
ChainedClosure使用如下
//如果商品打折 则打九折 九折后超过100 -20 满百-20
public static void checkClosure(){
List<Goods> list = new ArrayList<>();
list.add(new Goods("javase", 120, true));
list.add(new Goods("c++", 100, false));
list.add(new Goods("c#", 80, false));
//打折商品 打九折
Closure<Goods> closure=new Closure<Goods>() {
@Override
public void execute(Goods input) {
if (input.isDiscount()) {
input.setPrice(input.getPrice() * 0.9);
}
}
};
//满一百减20
Closure<Goods> closure1=new Closure<Goods>() {
@Override
public void execute(Goods input) {
if (input.getPrice()>=100) {
input.setPrice(input.getPrice() -20);
}
}
};
Closure<Goods> goodsClosure = ChainedClosure.chainedClosure(closure, closure1);
IterableUtils.forEach(list,goodsClosure);
list.forEach(System.out::println);
}