java8新特性-lambda四大内置函数式接口
在上一次的demo中,我们使用lambda在处理自己定义的业务时,需要自定义函数式接口,其实java8已经内置了常用的接口
四大核心内置函数式接口
Consumer<T> : 消费型接口
void accept(T t);
@Test public void test01(){ cons("=======", (x)->System.out.println(x)); } public void cons(String s,Consumer<String> con){ con.accept(s); }
Supplier<T> : 供给型接口
T get();
@Test public void test02(){ supp(()->666*2); } public void supp(Supplier<Integer> su) { System.out.println(su.get()); }
Function<T, R> : 函数型接口
R apply(T t);
@Test public void test03(){ List<Integer> fun = fun(6,(x)->{ List<Integer> list=new ArrayList<>(); for (int i = 0; i < x; i++) { Double random = Math.random()*100; list.add(random.intValue()); } return list; }); for (Integer integer : fun) { System.out.println(integer); } } public List<Integer> fun(Integer num ,Function<Integer,List<Integer>> fun){ return fun.apply(num); }
Predicate<T> : 断言型接口
boolean test(T t);
@Test public void test04(){ List<String> list=Arrays.asList("23456","wqew","sfsd","yfhfg"); List<String> pre = pre(list, (x)->{ String y="y"; return x.contains(y); }); for (String string : pre) { System.out.println(string); } /** * 注意:这个地方我使用了上次练习中多个语句和一个语句,这里提醒下,当使用一条语句的时候不可以包含{}和return,而多条语句必须要语法规范,哪怕后面的;也不可以少 * 否则eclipise会认为语法有错误(我的版本是4.5.1) */ pre(list, (x)->x.contains("y")); } public List<String> pre(List<String> list,Predicate<String> s){ List<String> list1=new ArrayList<>(); for (String string : list) { if(s.test(string)){ list1.add(string); }; } return list1; };
其余的内置接口如下:
总结:老话说 纸上得来终觉浅。。。。是特别有道理的,不去动手去敲一遍,你是不会知道里面哪里有坑,更不会深入的去思考
上一篇:
IDEA上Java项目控制台中文乱码