1.方法的参数
package Demo19;
/*
例如java.lang.Runnable接口就是函数式接口只有run方法
假设有一个startThread方法使用该接口runnable作为参数,呢么就可以使用Lambda进行传参
这种情况其实和Thread类的构造方法参数为Runnable没有本质区别
*/
public class Demo03 {
//定义方法startThread,方法的参数使用函数式接口Runnable
public static void startThread(Runnable run){
//开启多线程
new Thread(run).start(); //因为这个方法的参数就是Runnable类的对象
}
public static void main(String[] args) {
//调用startThread方法,方法的参数是一个接口,呢么我们就可以传递这个接口的匿名内部类
startThread(new Runnable() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+"线程启动了");//静态方法currentThread();获取当前线程
}
});
// //调用startThread方法,方法的参数是一个函数式接口(只有一个抽象方法的接口例如Runnable)
startThread(()->{ System.out.println(Thread.currentThread().getName()+"线程启动了");});
}
}
注意这里也不用写Runnable的实现类 至于为什么可以Lambda表达式来写 是因为函数式接口只有一个抽象方法(可以有其他方法但是abstract抽象方法只能有一个)
2.返回值
package Demo19;
import java.util.Arrays;
import java.util.Comparator;
/*
如果一个方法的返回值类型是一个函数式接口,呢么就可以直接返回一个Lambda表达式
当需要通过一个方法来获取一个java.util.Comparator接口类型的对象作为排序器时,就可以调该方法获取
*/
public class Demo04 {
//定义一个方法,方法的返回值类型使用函数式接口Comparator
public static Comparator<String> getComparator() {
//方法的返回值类型是一个接口,呢么我们就可以返回这个接口的匿名内部类
/*return new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
//按照字符串顺序排序
return s2.length()-s1.length();
}
};*/
//方法的返回值类型是一个函数式接口,所以我们可以返回一个Lambda表达式
return (String o1, String o2) -> {
return o2.length() - o1.length(); //降序排序
};
}
public static void main(String[] args) {
//创建一个字符串数组
String[] arr ={"aaa","bbbb","ccccccc","d"};
System.out.println(Arrays.toString(arr));
//调用Arrays中的sort();对字符串数组进行排序
Arrays.sort(arr,getComparator());//
//思考这个为什么可以这么写 因为sort(list ,Comparator) 然后这个getComparator()方法返回的就是Comparator(接口类)
//输出排序后的数组
System.out.println(Arrays.toString(arr)); //数组其实就是创建了新的 数组的内容是不变的注意这点
}
}
Arrays.sort(arr,getComparator()); //思考这个为什么可以这么写 因为sort(list ,Comparator) 然后这个getComparator()方法返回的就是Comparator(接口类)