java函数式接口

1.什么是函数式接口
什么是函数式接口

函数式接口

@FunctionalInterface
public interface DemoStart {
    public abstract void method();
}

实现

public class DemoImpl implements DemoStart{
    public static void main(String[] args) {

    }

    @Override
    public void method() {
        System.out.println("实现了函数式接口");
    }
}

使用

public class FunctionsImpl {
    //函数式接口的使用一般可以作为方法的参数或返回值类型
    private static void method(DemoStart s) {
        s.method();
    }
    public static void main(String[] args) {
    //1.调用show方法,方法的参数是一个接口所以可以床底接口的实现类对象
        method(new DemoImpl());
    //2.调用show方法,方法的参数是一个接口,所以我们可以传递接口的匿名内部类
        method(new DemoStart() {
            @Override
            public void method() {
                System.out.println("匿名内部类的形式!!!");
            }
        });
        //3.调用show方法其,方法的参数是一个接口,所以可以用lambda表达式
        method(()->{
             System.out.println("lambda表达式的方法!");
        });
        //3.调用show方法其,方法的参数是一个接口,所以可以用lambda表达式(简化)
        method(()-> System.out.println("lambda表达式(简化)的方法!"));
    }

}
函数式接口作为方法参数
使用lambda表达作为参数减少性能浪费(必须为函数式接口)

package DiaryDemo;

public interface Diary {
    String method();
}
package DiaryDemo;
/*
lambda的特点延迟加载
使用前提必须为函数式接口

使用lambda表达式最为参数传递,仅仅是把参数传递到方法中只有满足条件才会进行字符拼接所以不存在性能浪费
 */

public class Main {
    public static void main(String[] args) {
        String a="i";
        String a1="love";
        String a2="you";
        method(1,a+a1+a2);
        method(2,a+a1+a2);
        method1(1,()->a+a1+a2);
        method1(2,()->a+a1+a2);
    }
    private static void method(int i, String s) {
        if(i==1){
            System.out.println(s);
        }
    }
//    private static void method1(int i, Diary s) {
//        System.out.println("调用了方法2");
//        if(i==1){
//            System.out.println(s.method());
//        }
//    }
    private static void method1(int i, Diary s) {
    if(i==2){
        System.out.println("不满足条件不执行");
    }
}
}

函数式接口作为返回值类型

package DiaryDemo;

import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
/*
函数式接口作为返回值类型,我们可以返回其匿名内部类
 */
public class CompareDemo {

    private static Comparator<String> getCompare(){
//        return new Comparator<String>(){
//            @Override
//            public int compare(String o,String o1) {
//               return o.length()- o1.length();
//            }
//        };
//        return (String o1,String o2)->{
//            return o1.length()-o2.length();
//        };
        return (o1,o2)->o1.length()-o2.length();
    }
    public static void main(String[] args) {
        String []arr={"adadawsdasd","456456456","adad"};
        Arrays.sort(arr,getCompare());
        for (String s :
                arr) {
            System.out.println(s);
        }
        Arrays.sort(arr, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return o2.length()-o1.length();
            }
        });
        for (String s :
                arr) {
            System.out.println(s);
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值