先来看几个例子,主要练习策略模式:
用策略模式的做法
定义个接口
其实像这样的接口并不需要我们自己创建
java8推出的Lambda表达式主要就是为了简化开发,而Lambda表达式
的应用主要是针对与函数式接口,自然也推出了对应的一些接口
/** * Java8 内置的四大核心函数式接口 * * Consumer<T> :消费型接口 * void accept(T t); * * Supplier<T> :供给型接口 * T get(); * * Function<T,R> :函数型接口 * R apply(T t) * * Predicate<T> :断言型接口 * boolean test(T t) */
/**
* Java8 内置的四大核心函数式接口
*
* Consumer<T> :消费型接口
* void accept(T t);
*
* Supplier<T> :供给型接口
* T get();
*
* Function<T,R> :函数型接口
* R apply(T t)
*
* Predicate<T> :断言型接口
* boolean test(T t)
*/
public class TestLambda2 {
//Consumer<T> 消费型接口
@Test
public void test01(){
// Consumer<Double> con=new Consumer<Double>() {
// @Override
// public void accept(Double aDouble) {
// System.out.println(aDouble);
// }
// };
happy(1000, x-> System.out.println("消费了"+x+"元"));
}
//出去玩
public void happy(double money, Consumer<Double> con){
con.accept(money);
}
//Supplier<T> 供给型接口:
@Test
public void test02(){
List<Integer> numList = getNumList(10, () ->
//new Random().nextInt()//产生随机数 这里可以决定你要产生的是什么数
(int)(Math.random()*100)
);
System.out.println(numList);
}
//产生指定个数的整数,并放入集合中
public List<Integer> getNumList(int num, Supplier<Integer> sup){
List<Integer> list=new ArrayList<>();
for(int i=0;i<num;i++){//该for循环作用是产生多少个整数
Integer integer = sup.get();//而具体产生什么样的数,由Supplier的实现去指定
list.add(integer);
}
return list;
}
//Function<T,R> 函数型接口 对传入的参数T进行某种处理 返回需要的R
@Test
public void test03(){
int hello_function = handlerStr("Hello Function", x -> x.length());
System.out.println(hello_function);
}
//例如 希望传入一个字符串 返回一个字符串长度
public int handlerStr(String str, Function<String,Integer> func){
return func.apply(str);
}
private List<User> list= Arrays.asList(
new User("张三",18,3000.0),
new User("李四",28,9000.0),
new User("王五",48,8000.0),
new User("赵六",13,5000.0),
new User("田七",25,13000.0)
);
//Predicate<T> :断言型接口
@Test
public void test04(){
List<User> filter = filter(list, x -> x.getAge() > 28);
System.out.println(filter);
}
//比如说将满足条件的放到集合中
public List<User> filter(List<User> list, Predicate<User> pre){
List<User> userList=new ArrayList<>();
for(User user:list){
if(pre.test(user)){
userList.add(user);
}
}
return userList;
}
}