栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

函数式接口

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

函数式接口

一,函数式接口

有且仅有一个抽象方法的接口
Java中函数式编程的体现就是Lambda表达式,函数式接口就是适用于Lambda表达式的接口
只有确保接口中有且仅有一个抽象方法,java中的Lambda才能顺利的进行推导

@FunctionalInterface函数式接口的注解,与前面的@Override一样,当检测到与注解不同时就不会通过编译
当然,如果已经确信自己的是正确的它是可以省略的
函数式接口可以作为方法的参数也可以作为方法的返回值

函数式接口作为方法的参数:用到的方法useRunnable(Runnable r)

useRunnable(()-> System.out.println("线程已启动"+Thread.currentThread().getName()));

函数式接口作为方法的返回值:

Collections.sort(list,useComparable());

private static Comparator useComparable(){
    return (s1,s2)->s1.length()-s2.length();
}

二,常用函数式接口

1、Supplier接口

Supplier 接口也被称为生产型接口,如果我们指定了接口的泛型是什么类型,那么接口中的get方法就会生产什么类型的数据供我们使用

包含一个无参的方法get()

String s=useSupplier(()-> "落霞与孤鹜齐飞,秋水共长天一色。");
System.out.println(s);

private static String useSupplier(Supplier sup){
        return sup.get();
}

2、Consumer接口

void accept(T t):对给定的参数执行此操作
default Consumer andThen(Consumer after):返回一个组合的Consumer,依次执行此操作,然后执行after操作
Consumer接口也被称为消费型接口,它消费的数据的数据类型由泛型指定

public class Test4 {
    public static void main(String[] args) {
        useConsumer("落霞与孤鹜齐飞,秋水共长天一色。",s-> System.out.println(s));

        useConsumer("落霞与孤鹜齐飞,秋水共长天一色。",s -> System.out.println(s.substring(0,s.length()/2)),s -> System.out.println(s.substring(s.length()/2)));
    }

    private static void useConsumer(String s,Consumer con1,Consumer con2){
        con1.andThen(con2).accept(s);
    }

    private static void useConsumer(String s, Consumer con){
        con.accept(s);
    }
}

3、Predicate接口

此接口通常用来判断参数是否满足指定的条件
boolean test(T t):    对给定的参数进行判断(判嘶逻辑由Lambda表达式实现),返回一个布尔值
default Predicate negate():返回一个逻辑的否定,对应逻辑非
default Predicate and(Predicate other):返回一个组合判断。对应短路与
defaultPredicate or(Predicate other):返回一个组合判断,对应短路或

public class Test5 {
    public static void main(String[] args) {
        boolean b1=usePredicate("helloworld",s->s.length()>8);
        System.out.println(b1);

        boolean b2=usePredicate("hello",s->s.length()>8,s -> s.length()<15);
        System.out.println(b2);
    }

    private static boolean usePredicate(String s, Predicate pre1,Predicate pre2){
//        短路与,前为false后为true,结果为false
//        return pre1.and(pre2).test(s);

//        短路或,前为false后为true,结果为true
        return pre1.or(pre2).test(s);
    }

    private static boolean usePredicate(String s, Predicate pre){
//        return pre.test(s);结果为true
        return pre.negate().test(s);
    }
}

Function接口

此接口通常用于对参数进行处理,转换(由Lambda表达式完成),然后返回新的值
Function:常用的两个方法,T是函数输入的类型,R是函数结果的类型
R apply(T t):将此函数应用于给定的参数
default Function andThen(Function after):返回一个组合函数,首先将该函数应用于输入,然后将after函数应用于结果

import java.util.function.Function;

public class Test6 {
    public static void main(String[] args) {
        String str="小明,18";
        useFunction(str,s-> String.valueOf(s.split(",")[1]),s->Integer.parseInt(s)+70);
    }

    private static void useFunction(String s, Function fun1,Function fun2){
        System.out.println(fun1.andThen(fun2).apply(s));
    }
}

Consumer的andThen()第一个操作完,然后第二个操作,但是两次互不影响,Function的andThen()则是第二个在第一个操作结果上操作。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/860989.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号