JDK8中的函数式接口功能分析与demo

Posted 爱叨叨的程序狗

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JDK8中的函数式接口功能分析与demo相关的知识,希望对你有一定的参考价值。

Consumer

消费型接口,通过传入参数输出值,可以理解为定义了一个void方法处理数据,如果出现异常,则把异常转发给调用者。

例如forEach

在这里插入图片描述

Supplier

Optional.orElseGet()方法入参就是Supplier,如果存在值,通过Supplier容器存储该值并通过其get方法返回。

在这里插入图片描述

Predicate

谓词表达的是一种关系,其作用是判断。

        Predicate<Integer> predicate = new Predicate<Integer>() {
            @Override
            public boolean test(Integer integer) {
                if (integer > 5) {
                    return true;
                }
                return false;
            }
        };
        Stream<Integer> stream = Stream.of(1, 23, 3, 4, 5, 56, 6, 6);

		//以上代码相当于
        List<Integer> lists = stream.filter(i -> i > 5).collect(Collectors.toList());

i->i>5;就相当于一个Predicate对象, i-> i>5 中的 ->是一个语法糖,是lambda的写法,

(parameters) -> expression


(parameters) ->{ statements; }

Function

功能型接口,作用是类型转换,将输入数据转换成另一种形式输出。

public void test_Function() {
    Function<String, Integer> function = new Function<String, Integer>() {
        @Override
        public Integer apply(String s) {
            //重写Function的apply方法,获取字符串的长度,将String类型转化为Integer类型
            //Function中第一个泛型是当前类型,第二个Integer是转换为后的类型
            return s.length();
        }
    };

    Stream<String> stream = Stream.of("aaa", "bbbbb", "ccccccv");
    Stream<Integer> stream1 = stream.map(function);
    stream1.forEach(System.out::println);
    System.out.println("********************");

    ArrayList<String> stringArrayList = new ArrayList<>();
    stringArrayList.add("aaaaaaaa");
    stringArrayList.add("bbbbb");
    stringArrayList.add("ccc");
    stringArrayList.add("dd");
    //使用lambda的写法
    //Stream.map()将当前类型转化为其他类型
    List<Integer> collect = stringArrayList.stream().map(String::length).collect(Collectors.toList());
    System.out.println(collect);
}

使用map方法,Function为入参,将String类型转化为Integer。

在这里插入图片描述

该API常用于获取List中单一属性值的场景。

以上是关于JDK8中的函数式接口功能分析与demo的主要内容,如果未能解决你的问题,请参考以下文章

JDK8中的函数式接口了解下

jdk8函数式编程,10行代码实现 Excel 导出方案

JDK8-十大新特性-附demo

JDK8函数式接口的定义

JDK8-十大新特性-附demo

JDK8函数式接口的思考