先来看几个例子,主要练习策略模式:
用策略模式的做法
定义个接口
其实像这样的接口并不需要我们自己创建
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> 消费型接口@Testpublic 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> 供给型接口:@Testpublic 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@Testpublic 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> :断言型接口@Testpublic 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;}
}