java8新特性之函数式接口使用

我们都知道java8的主要新特性是,stream流以及lambda表达式。
java8内置了很多函数式接口,但是最基本的四大函数式接口,已经足以应付绝大多数场景。
今天我们讲解一下,使用lambda表达式实现java8四大内置函数式接口。

一、消费型接口 Cousumer< T>

Cousumer类型接口没有返回值,参数为T,执行格式为accept(T t)

  public static void main(String[] args) {
        //使用lambda表达式调用happy 传递参数money
        happy(398d,(m) ->System.out.println("大保健消费了"+m+"元"));
    }

    //Cousumer<T>类型接口没有返回值,参数为T,执行格式为`accept(T t)`:
    public static void happy(Double money, Consumer<Double> consumer){
        consumer.accept(money);
    }

没有返回值,消费型接口是一个单向串行的操作。

大保健消费了398.0
二、供给型接口 Supplier< T>

Supplier 类型接口返回值T,没有参数,执行格式为T get()
场景:产生指定个数的整数,并放入集合中返回
num指定了返回随机数的个数,supplier函数决定了,返回随机数的规则。

   public static void main(String[] args) {
        //获取十个 100以内随机数
        List<Integer> intNum = getIntNum(10, () -> (int) (Math.random() * 100));
        for (Integer integer : intNum) {
            System.out.println("100以内随机数:"+integer);
        }
    }

    //产生一定数量的整数,并返回集合
    //supplier 指定了产生数的规则
    //供给型接口
    public static List<Integer> getIntNum(int num, Supplier<Integer> supplier){
        List<Integer> list = new ArrayList<>();
        for (int i = 0; i < num; i++) {
            Integer integer = supplier.get();
            list.add(integer);
        }
        return list;
    }

根据lambda表达式条件,获取数据,没有参数,有返回值。

100以内随机数8
100以内随机数1
100以内随机数72
100以内随机数78
100以内随机数39
100以内随机数88
100以内随机数94
100以内随机数70
100以内随机数44
100以内随机数37
三、函数型接口 Function<T,R>

Function<T,R>类型接口参数为T,返回值为R,执行格式为R apply(T t)


    public static void main(String[] args) {
        String s = stringHandler("我是一个程序员   ", (str) -> str.replace("程序员", "帅哥").trim());
        System.out.println(s);
    }

    //函数式接口
    //传递一个字符串,返回一个字符串,
    //function 决定了对字符串操作的表达式函数
    public static String stringHandler(String str, Function<String,String> function){
        return  function.apply(str);
    }

传递一个字符串,返回根据指定函数操作后的字符串。

我是一个帅哥
四、断言型接口 Predicate < T>

Predicate类型接口参数为T,返回值为Boolean,执行格式为Boolean test(T t)

public static void main(String[] args) {
        List<String> list = Arrays.asList("张三", "李四", "王二麻子", "小酒鬼", "大胡子", "小胡");
        List<String> ss = filterStr(list, (str) -> str.length() > 2);
        for (String s : ss) {
            System.out.println(s);
        }
    }

    //将一定数量的字符串进行筛选返回
    //predicate为判断条件
    //断言式接口
    public static List<String> filterStr(List<String> strs, Predicate<String> predicate){
        List<String> list = new ArrayList<>();

        for (String str : strs) {
            if(predicate.test(str)){
                list.add(str);
            }
        }
        return list;
    }

通过断言式接口判断集合中的元素,满足不满足lambda条件,满足则添加到新的集合返回。

王二麻子
小酒鬼
大胡子

注意:函数式接口里面的参数均为泛型操作,具体执行过程,可根据不同对象针对性的完成业务代码。

五、其他类型的一些函数式接口

除了上述得4种类型得接口外还有其他的一些接口供我们使用:

1).BiFunction<T, U, R>

参数类型有2个,为T,U,返回值为R,其中方法为R apply(T t, U u)

2).UnaryOperator(Function子接口)

参数为T,对参数为T的对象进行一元操作,并返回T类型结果,其中方法为T apply(T t)

3).BinaryOperator(BiFunction子接口)

参数为T,对参数为T得对象进行二元操作,并返回T类型得结果,其中方法为T apply(T t1, T t2)

4).BiConsumcr(T, U)

参数为T,U无返回值,其中方法为 void accept(T t, U u)

5).ToIntFunction、ToLongFunction、ToDoubleFunction

参数类型为T,返回值分别为int,long,double,分别计算int,long,double得函数。

6).IntFunction、LongFunction、DoubleFunction

参数分别为int,long,double,返回值为R。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值