函数式接口
有且仅有一个抽象方法的接口
@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是短路或
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。