Lambda表达式的几种方式-003
2019-01-22 本文已影响0人
小尾巴1024
方式一:无参函数的写法
//无参数方式
new Thread(
() -> System.out.println("Hello,Wei") // 省略接口名和方法名
).start();
//Java7的写法
new Thread(new Runnable(){ // 接口名
@Override
public void run(){// 方法名
System.out.println("Hello,Wei");
}
}).start();
方式二:有参函数的写法
//两个参数
List<String> list = Arrays.asList("I", "am", "zeng", "wei");
Collections.sort(list, (s1, s2) ->{// 省略参数表的类型
if(s1 == null)
return -1;
if(s2 == null)
return 1;
return s1.length()-s2.length();
});
//Java7写法
List<String> list = Arrays.asList("I", "am", "zeng", "wei");
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();
}
});
方法三:参数带类型写法
方式二的带参是没有写参数类型的,这在lambda表达式中是被允许的,因为Lambda可以根据上下文推断出类型,但是也可以把类型写上
//参数带上类型
List<String> list = Arrays.asList("I", "am", "zeng", "wei");
Collections.sort(list, (String s1, String s2) ->{
if(s1 == null)
return -1;
if(s2 == null)
return 1;
return s1.length()-s2.length();
});
方式四:代码块的写法
方式一可以看到,只有一行代码,所以不用加上大括号‘{}’,但是如果有多选代码,如方式二和方式三,就要加上大括号‘{}’。
new Thread(
() -> { // 多行代码加上‘{}’
System.out.println("Hello,Wei") ;
System.out.println("Hello,I am fine");
}
).start();
方式五:自动返回值和手动返回值写法
// 自动返回(a/b)
MathOperation division = (int a, int b) -> a / b;
// 手动添加return返回
MathOperation multiplication = (int a, int b) -> { return a * b; };
//函数接口
interface MathOperation {
int operation(int a, int b);
}
方式六:双冒号表达式
//双冒号可以调用方法
public class LambdaTest {
public static void printStr(String str) {
System.out.println(str);
}
public static void main(String[] args) {
List<String> list = Arrays.asList("aaa","bbb","ccc");
// 1.通常的遍历方式
for(String str: list) {
LambdaTest.printStr(str);
}
// 2.使用Lambda表达式遍历
list.forEach(str -> {
LambdaTest.printStr(str);
});
// 3.使用::遍历
list.forEach(LambdaTest::printStr);
// 下面的方法和上面等价,使用的是函数式编程
Consumer<String> methodParam = LambdaTest::printStr; //方法参数
list.forEach(x -> methodParam.accept(x));//方法执行accept
}
}
//双冒号调用构造方法
() -> new HashMap<>();
HashMap::new
参考:https://segmentfault.com/a/1190000015308249
http://www.runoob.com/java/java8-lambda-expressions.html