学习札记-Java8系列-4-内置函数式接口

学习札记-Java8系列-4-内置函数式接口

常用的内置函数式接口

JDK提供了大量常用的函数式接口以丰富Lambda的典型使用场景,它们主要在java.util.function包中被提供。

上面用到过的Consumer接口就是其中之一,接下来给大家介绍下其他的常用函数式接口

image.png

代码演示

   public class FunctionDemo {

    //  函数式接口类型         参数类型    返回类型                说明
    //  Consumer<T>消费型接口        T   void        对类型为T的对象操作,方法:void accept(T t)
    @Test
    public void test1() throws Exception {
        shop(10000.0, new Consumer<Double>() {
            @Override
            public void accept(Double money) {
                System.out.println("购买电脑花费:" + money + "元");
            }
        });
        shop(5000.0, money-> System.out.println("购买手机花费:" + money + "元"));
    }

    public static void shop(Double money, Consumer<Double> con) {
        con.accept(money);
    }
    //===================================================================================
    //  函数式接口类型         参数类型    返回类型                说明
    //  Supplier<T>供给型接口        无       T           返回类型为T的对象,方法:T get();可用作工厂
    @Test
    public void test2() throws Exception {
        String code = getCode(4, ()-> new Random().nextInt(10));
        System.out.println(code);
    }
    //获取指定位数的验证码
    public String getCode(int num, Supplier<Integer> sup){
        String str = "";
        for (int i = 0; i <num ; i++) {
            str += sup.get();
        }
        return str;
    }
    
    //===================================================================================
    //  函数式接口类型         参数类型    返回类型                说明
    //  Function<T, R>函数型接口 T       R           对类型为T的对象操作,并返回结果是R类型的对象。方法:R apply(T t);
    @Test
    public void test3() throws Exception {
        int length = getStringRealLength(" www.wolfcode.cn  ", str -> str.trim().length());
        System.out.println(length);
        
    }
    public int getStringRealLength(String str,Function<String,Integer> fun){
        return fun.apply(str);
    }
    
    //===================================================================================
    //  函数式接口类型         参数类型    返回类型                说明
    //  Predicate<T>断言型接口       T   boolean         判断类型为T的对象是否满足条件,并返回boolean 值。方法boolean test(T t);
    @Test
    public void test4() throws Exception {
        List<String> list = getString(Arrays.asList("Java8","Lambda","wolfcode"), s -> s.length() > 5);
        System.out.println(list);
        //后面学习了Stream API操作更简单
        Arrays.asList("Java8","Lambda","wolfcode").stream().filter(s -> s.length() > 5).forEach(System.out::println);
        
    }
    //获取集合中长度大于5的字符串
    public List<String> getString(List<String> list, Predicate<String> pre){
        List<String> newList = new ArrayList<>();
        for (String string : list) {
            if (pre.test(string)) {
                newList.add(string);
            }
        }
        return newList;
    }
}

其他函数式接口

当然Java8中还提供了很多各种用途的函数式接口,大家可以自己去探索

image.png

可以从java.util.function包下查看所有的函数式接口

image.png
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容