接口中的方法将拥有 【方法体】
eg:
default String getClassName(){
return this.getClass().getName();
}
简化代码、方便维护
函数式接口:只有一个抽象方法的interface
@FunctionalInterface --> jdk1.8提供的规范注解
eg:
@FunctionalInterface
public interface MyInter{
//仅有一个抽象方法
public void lambdaTest();
default String defaultTest(){
return this.getClass();
}
//静态大法
static List<String> sortList(List<String> list);
}
Lambda表达式
lambda表达式源于: 入 演算; 它是图灵完整的;可以用lambda表达式来表示任何数学算式
其最主要的概念就是表达式:
<expression> := <variable> | <funtion> | <application>
variable:占位符
function:匿名函数定义,需要一个变量,并且声称另一个lambda表达式;
application:把一个函数当做一个参数的行为
1.通过数组元素的长度排序:
List<String> li = Arrays.asList("this","is","first","lambda");
Collections.sort(li,(first,second) -> first.length() - second.length());
System.out.println(Arrays.toString(li.toArray()));
:[is, this, first, lambda]
(first,second) -> first.length() - second.length()是
Comparator<String>的lambda表达式!
1.1Stream的集合遍历操作
li.stream().filter(l -> l.hashCode() > "a40".hashCode())
2.表示匿名内部类: 函数接口;接口中只有一个方法
public static void main(String[] args) {
String ss1 = get(new Text() {
@Override
public void sout(String s) {
System.out.println("ss"); //逻辑部分
}
});
String ss/*返回值*/ = get((e/*参数*/) -> System.out.println("ss")/*//逻辑部分*/);
System.out.println(ss);
}
public static String get( Text text) {
return "haha";
}
网友评论