函数式接口

有且仅有一个形象办法的接口
@FunctionalInterface 函数式接口

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

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

public static void startThread(Runnable r){    new Thread(r).start();}//在主办法中调用startThread办法//匿名外部类的形式startThread(new Runnable() {      @Override      public void run() {            System.out.println("线程启动了");      }});//用lambda表达式改良startThread(() -> sout("程启动了"));

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

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);//排序后 依照接口中定义的办法接口进行排序


罕用的函数式接口

Supplier接口

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

练习

//返回一个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接口





练习



Predicate接口





negate是取 非!


and是短路与

or是短路或

练习


Function接口







练习