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

java中的函数式接口

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

java中的函数式接口

A.简单概述:

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

B.如何检测接口是否为函数式接口:

在接口定义的上方放上“ @Functionionallnterface ”如果是函数式接口,编译通过,否则编译失败。

注意 :我们自己定义函数式接口时@Functionionallnterface说可选的,就算不写它只要满足函数式接口的条件即可。但是建议加上。

a.代码案例:

package demo122;


public class MyInterfaceDemo {
    public static void main(String[] args) {
        //用作局部变量
        MyInterface my = (() -> System.out.println("函数式接口。。。"));
        my.show();

    }
}
package demo122;

@FunctionalInterface
public interface MyInterface {
    void show();
}

 

C.函数式接口作为方法的参数:

如果方法的一个参数是函数式接口,我们可以使用Lambda表达式作为参数传递。

a.代码案例:

首先我们在idel中Ctrl + b 跟进查看Runnable接口的源码;

@FunctionalInterface
public interface Runnable {
    
    public abstract void run();
}

我们不难发现,该接口为一个函数式接口。

再看案例:

package demo122;


public class RunnableDemo {
    public static void main(String[] args) {
        //在主方法中调用startThread()方法
        startThread(() -> {
            System.out.println(Thread.currentThread().getName() + "启动啦。。。。");
        });
    }
    //startThread(Runnable r) 方法参数是一个函数式接口
    private static void startThread(Runnable r) {
        //线程的实现方法2
        Thread t = new Thread(r);
        //设置线程名称
        t.setName("我自命名的线程");
        //启动线程
        t.start();
    }
}
我自命名的线程启动啦。。。。

Process finished with exit code 0

D.函数式接口作为方法的放回值:

如果方法的放回值是一个函数式接口,我们可以使用Lambda表达式作为结果返回。

a.代码演示:

public class ComparatorDemo {
    public static void main(String[] args) {
        //构造使用场景

        //定义集合,储存字符串元素
        ArrayList array = new ArrayList<>();
        array.add("cccc");
        array.add("aa");
        array.add("b");
        array.add("ddd");

        System.out.println("排序前:" + array);

        Collections.sort(array, getComparator());
        System.out.println("排序后:" + array);

    }

    //Comparator getComparator() 方法返回值是一个函数式接口
    private static Comparator getComparator() {
        return (String s1, String s2) -> {
            return s1.length() - s2.length();
        };
    }

}
排序前:[cccc, aa, b, ddd]
排序后:[b, aa, ddd, cccc]

Process finished with exit code 0

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

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

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