java 函数式接口

函数式接口

概述

  • 含义:

    • 只有一个抽象方法的接口,这个接口就是函数式接口
    • 函数式接口是Lambda表达式的适用前提
  • 格式说明:

    • 检查一个接口是否是函数式接口,可以使用一个注解
      • @functionalInterface
    • 效果:
      • 如果不是函数式接口则编译报错

函数式接口的理解和作用

  • 函数:

    • 处理数据的逻辑,定义参数和处理参数的代码,可能能返回处理的结果
    • 单独存在的一个处理逻辑,不应该从属于热别的主体(不应该属于某个类、不应该属于某个对象)
    • 定义的角度来说,医改定义在文件中,而非某个类或者接口中
    • java语言只有方法没有函数
    • 弊端:只传递原始数据或者结果数据,无法传递对于数据的处理方式;没有所谓的函数的类型,无法声明函数的引用
  • java的解决方案:

    • 使用函数式接口来解决
    • 具体:
      • 使用几个接口讲方法包起来,认为包起来的方法就是一个函数,借口就是函数的类型,有了这个类型之后就可以声明该类型含税引用
      • 使用接口的实现类对象,来表达函数的具体内容认为成函数类型的对象
      • 这种结局方案称为函数式编程

jdk中提供的常用函数式接口

  • 原因:
    • 每次想表达函数是,自己定义一个接口,用来表达函数的类型等,太麻烦
    • 而且很多函数都是同一类型,且经常使用,不希望每次都要自己定义
    • jdk就将这些常用的函数类型,帮我们定义出来了
罗列
  • Consumer : 消费接口
    • void accept(T t)
  • Supplier: 供给形接口
    • T get()
  • Function<T,R>: 函数型接口
    • R apply(T t)
  • Predicate : 断言型接口
    • boolean tst(T t)
消费型接口
  • Consumer : 消费接口
    • void accept(T t)
    • 其中T表示该函数要消费的内容
    • 消费:获得这个内容使用,之后就没有这个数据了
方法引用
  • 在这里插入图片描述
供给型接口

在这里插入图片描述

	public static void main(String[] args) {
		// () ->new Random().nextInt(100) + 1) 相当于重写了Supplier的get方法,
		//方法内容是返回new Random().nextInt(100) + 1的值
		List<Integer> list = creatList(10, () -> new Random().nextInt(100) + 1);
		System.out.println(list);
	}
	public static List<Integer> creatList(int n,Supplier<Integer> sup){
		List<Integer> list = new ArrayList<Integer>();
		while(list.size() < n) {
			list.add(sup.get());
		}
		return list;
	}
函数型接口

在这里插入图片描述

断言型接口
  • Predicate : 断言型接口
    • boolean tst(T t)

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值