Java8特性之内置函数式接口

上一篇Lambda表达式说到,Lambda表达式需要“函数式接口”的支持,那每一次需要用到Lambda表达式,都得写一个接口,这样不就更麻烦了吗?但是,Java8已经为我们内置了一些常用的函数式接口,一般来说,我们是不需要自己定义一个函数式接口的。

内置函数式接口一:
  • Consumer : 消费型接口

    ​ void accept(T t);

    消费型接口的返回值为void,也就是对参数进行操作,但是无返回值,通俗地说可以理解为有去无回

    下面看示例:

	@Test
	public void test() {
		spend(1000, (m) -> System.out.println("本次花费:" + m + "元"));
	}

	public void spend(double money, Consumer<Double> com) {
		com.accept(money);
	}

内置函数式接口二:
  • Supplier : 供给型接口

    ​ T get();

供给型接口简单地说就是给你返回一些对象的。

例如有这样的需求:产生指定个数的整数,并放入集合中

实现代码如下:

	@Test
	public void test() {
		getNumList(10, () -> (int) (Math.random() * 100)).forEach(System.out::println);
	}

	public List<Integer> getNumList(int num, Supplier<Integer> su) {
		List<Integer> list = new ArrayList<>();
		for (int i = 0; i < num; i++) {
			list.add(su.get());
		}
		return list;
	}

内置函数式接口三:
  • Function<T, R> : 函数型接口

    ​ R apply(T t);

上一篇Lambda表达式文末,我们的示例三里写了一个MyFun的接口,但这里,我们不需要再重新写一个接口,Java8已经内置了Function<T, R> 这样的函数型接口。

下面的代码以Function这个函数型接口实现了跟上一篇示例三相同的操作

	@Test
	public void test() {
		System.out.println(strHandler("abcdefg",(str)-> str.toUpperCase()));
		System.out.println(strHandler("\t\t\t\t abcdefg",(str)-> str.trim()));
		System.out.println(strHandler("abcdefg",(str)-> str.substring(2, 5)));
		
	}
	
	public String strHandler(String str, Function<String, String> fun) {
		return fun.apply(str);
	}

内置函数式接口四:
  • Predicate : 断言型接口

    ​ boolean test(T t);

    Predicate : 断言型接口,我们用于做一些判断操作。

    现在,我们有这样的需求:将满足条件的字符串,放入集合中。

    这里的条件为字符串长度大于3

    	@Test
    	public void test() {
    		List<String> list = Arrays.asList("ABCD","Hello","asd","as","jwhgr");
    		List<String> filterList = filterStr(list, (s) -> s.length()>3);
    		filterList.forEach(System.out::println);
    	}
    	
    	public List<String> filterStr(List<String> list, Predicate<String> pre){
    		List<String> listStr = new ArrayList<>();
    		for (String str : list) {
    			if (pre.test(str))
    				listStr.add(str);
    		}
    		return listStr;
    	}
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值