Lambda表达式

81 阅读1分钟

首先,Lambda表达式只适合函数式接口!

什么是函数式接口?

函数式接口是指内部只有一个抽象方法的接口。如果一个接口内部有多个方法,那就不能使用Lambda表达式!

// 自定义函数接口
public interface ConsumerInterface<T>{
	void accept(T t);
}

Lambda具体使用

无参

// JDK7 匿名内部类写法
new Thread(new Runnable(){// 接口名
	@Override
	public void run(){// 方法名
		System.out.println("Thread run()");
	}
}).start();
// 使用Lambda表达式java
new Thread(() -> {  //如果只有一条语句,这对大括号可以省略
			System.out.println("aaa");
		});

// 只有一条语句,省略大括号
new Thread(() -> System.out.println("aaa"));

有参

// JDK7 匿名内部类写法
List<String> list = Arrays.asList("I", "love", "you", "too");
Collections.sort(list, new Comparator<String>(){// 接口名
    @Override
    public int compare(String s1, String s2){// 方法名
        if(s1 == null)
            return -1;
        if(s2 == null)
            return 1;
        return s1.length()-s2.length();
    }
});
// JDK8 Lambda表达式写法
List<String> list = Arrays.asList("I", "love", "you", "too");
Collections.sort(list, (s1, s2) ->{// 省略参数表的类型
    if(s1 == null)
        return -1;
    if(s2 == null)
        return 1;
    return s1.length()-s2.length();
});