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;
	};

其余的内置接口如下:

总结:老话说 纸上得来终觉浅。。。。是特别有道理的,不去动手去敲一遍,你是不会知道里面哪里有坑,更不会深入的去思考

经验分享 程序员 微信小程序 职场和发展