函数式接口

有且仅有一个抽象方法的接口
@FunctionalInterface 函数式接口

//抽象方法
void show();
//函数式接口做局部变量
MyInterface my = () -> sout("函数式接口");
my.show();

image.png

函数式接口作为方法的参数

image.png

public static void startThread(Runnable r){
    new Thread(r).start();
}
//在主方法中调用startThread方法
//匿名内部类的方式
startThread(new Runnable() {
      @Override
      public void run() {
            System.out.println("线程启动了");
      }
});

//用lambda表达式改进
startThread(() -> sout("程启动了"));

image.png

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

image.png

public static Comparator<String> getComparator(){
    //返回的是接口的实现类对象
    //匿名内部类的方式
    Comparator<String> comp = new Comparator<String>(){
        @Override
        public int compare(String s1,String s2) {
            return s1.length()-s2.length();
        }
    };
    return comp;
    
    //用lambda表达式改进
    return (String s1,String s2) -> {
        return s1.length()-s2.length();
    };
    //再优化
    return (s1,s2) -> s1.length()-s2.length();
}

//主程序 构造使用的场景
//定义集合 存储字符串元素
ArrayList<String> array = new ArrayList<String>();
array.add("cccc");
array.add("aa");
array.add("b");
array.add("ddd");

sout(array);//排序前 怎么添加的怎么输出
Collections.sort(array);
sout(array);//排序后 按照自然顺序abcd输出
Collections.sort(array,getComparator());
sout(array);//排序后 按照接口中定义的方法接口进行排序

image.png
image.png

常用的函数式接口

image.png

Supplier接口

image.png

//定义一个方法,返回一个字符串数据
private static String getString(Supplier<String> sup){
    return sup.get();
}
//主方法中调用
String s = getString(() -> {
    return "林青霞";
});
//优化
String s = getString(() -> "林青霞");

image.png

练习

image.png

//返回一个int数组的最大值
private static int getMax(Supplier<Integer> sup){
    return sup.get();
}

//主方法中调用
//定义一个int数组
int[] arr = {19,50,28,37,46};
int maxValue = getMax(() -> {
    int max= arr[0];
    for (int i = 0; i < arr.length; i++) {
        if(arr[i]>max){
            max = arr[i];
        }
    }
});
sout(maxValue );

Consumer接口

image.png
image.png
image.png
image.png
image.png

练习

image.png
image.png
image.png

Predicate接口

image.png
image.png
image.png
image.png
negate是取 非!
image.png
image.png
and是短路与
image.png
or是短路或

练习

image.png
image.png

Function接口

image.png
image.png
image.png
image.png
image.png
image.png
image.png

练习

image.png
image.png
image.png
image.png


Loccy
4 声望1 粉丝

« 上一篇
方法引用
下一篇 »
Stream流