快速上手java8四大函数式接口!

942 阅读1分钟

这是我参与更文挑战的第12天,活动详情查看: 更文挑战

今天 4ye 来和小伙伴们分享下 java8四大函数式接口 (Consumer,Supplier,Function,Predicate)的简单使用

当然我们不得不聊下它的这个函数式编程先,毕竟这个是一个很重要的改进 😁

函数式接口

函数式接口指的是接口中只有一个抽象方法的接口,用注解@FunctionalInterface标记,表示该接口是函数式接口

注解FunctionalInterface

如图,可以看到这里什么都没有,表面它只是一个标记接口.

20201014223650

四大接口

Consumer

源码如下:

20201014225926

作用: 内部消化传进来的参数, 没有返回值

示例:

Consumer<String> consumer=System.out::println;
consumer.accept("Consumer");
// 结果: "Consumer"

Supplier

源码如下:

20201014231056

作用: 没有传参 , 直接返回一个结果

示例:

Supplier<String> supplier= () -> "Supplier";
System.out.println(supplier.get());
// 结果: "Supplier"

Function

额这个源码太长了,截取部分源码如下:

20201014231327 可以看到它是综合了这个consumerSupplier🐖

作用: 根据传的参数,返回一个结果,这里是既有传参,又有返回值😝

示例:

Function<String,String> func= String::toUpperCase;
System.out.println(func.apply("Function"));
// 结果: "FUNCTION"

Predicate

这个源码也比较长,截取部分源码如下:

20201014232954

作用: 判断给的参数是否符合条件,返回 false 或者 true

示例:

Predicate<String> predicate= "predicate"::equals;
System.out.println(predicate.test("predicate"));
// 结果: true

可以看到还是特别简单滴~

小例子

再举个小例子 (大家都熟悉的 hashmap

    @Test
    public void mergeTest(){
        String key="java4ye";
        HashMap<String, Integer> map=new HashMap<>();
        map.put(key,1);

        // 写法1
        map.merge(key,2,Integer::sum);

        System.out.println(map.get(key));

        // 写法2
        Integer integer = map.get(key);
        if (integer!=null){
            integer+=2;
            map.put(key,integer);
        }

        System.out.println(map.get(key));
    }
    // 3 
    // 5

这里就用到这个 Function 函数式接口啦~ 对比这两种写法,是不是发现第一种简洁多啦!

而且我们又 get 到另外一个概念,lambda表达式,通过第一种写法,我们也可以很快认识到,lambda表达式其实是实现函数式接口的一个快捷方式~


那么本期就简单介绍这些先啦~😄

最后

欢迎小伙伴们来一起探讨问题~

如果你觉得本篇文章还不错的话,那拜托再点点赞支持一下呀😝

让我们开始这一场意外的相遇吧!~

欢迎留言!谢谢支持!ヾ(≧▽≦*)o 冲冲冲!!

我是4ye 咱们下期很快再见!!