三 Java8四大内置核心函数式接口

2019-04-11  本文已影响0人  败给小萝莉

Java8为我们提供了四大核心函数式接口:

消费型接口

Comsumer<T>:void accept(T t);
顾名思义,你提供给我内容(有参数),我负责消费(使用你提供的参数,无返回值)
示例:

    public void happy(double money, Consumer<Double> con){
        con.accept(money);
    }
    @Test
    public void test() {
        happy(1000, (x) -> System.out.println("消费 : " + x));
    }

供给型接口

Supplier<T> :T get();
顾名思义,这个接口专门产生对象返回给调用者,我不消耗任何东西(无参),专门给你提供内容(有返回值)
示例:产生指定个数的整数并放入集合中

public List<Integer> getNumList(int num, Supplier<Integer> sup) {
        List<Integer> list = new ArrayList<>();
        for (int i = 0; i < num; i++) {
            list.add(sup.get());
        }
        return list;
    }
    @Test
    public void test2() {
        List<Integer> numList = getNumList(10, () -> (int) (Math.random() * 100));
        for (Integer num : numList) {
            System.out.println(num);
        }
    }

函数型接口

Function<T, R> :R apply(T t);
这个接口接收一个参数,并且返回内容,你提供给我一些东西(有参数),我返还给你一些东西(有返回值)。
示例:将一个字符串转成大写

    public String strHandler(String str, Function<String, String> fun) {
        return fun.apply(str);
    }
    @Test
    public void test3() {
        String st = strHandler("Helllo", (str) -> str.toUpperCase());
        System.out.println(st);
    }

断言型接口

Predicate<T> :boolean test(T t);
顾名思义,做判断,你给我参数,我处理完后给你一个判断的结果:true or false,有参数有返回值并且返回值为boolean类型的值
示例:将字符串长度大于3的字符串放入集合中

    public List<String> filterStr(List<String> list, Predicate<String> pre) {
        List<String> strList = new ArrayList<>();
        for (String str : list) {
            if (pre.test(str)) {
                strList.add(str);
            }
        }
        return strList;
    }
    @Test
    public void test4() {
        List<String> strList = Arrays.asList("Hello", "mobei", "Lambda", "www", "ok");
        List<String> res = filterStr(strList, (str) -> str.length() > 3);
        for (String str : res) {
            System.out.println(str);
        }
    }

这四大内置核心函数式接口算是开发中常用的,除开这四个,其实Java8还帮我们提供了其它的函数式接口,理解了这四大核心函数式接口,其它的理解起来也就相当容易了。我们可以去java.util.function包下面查看具体的接口:


函数式接口.png

根据具体的业务需求进行选择,如果都没有那我们就只能选择自己编写函数式接口了

上一篇下一篇

猜你喜欢

热点阅读