1、lambda表达式
1.1、Java
- 只有一个抽象方法的接口被实现时,可以使用lambda表达式
- Lambda表达式语法格式:
(形参列表) -> {Lambda体}
1.1.1、无参数
class MyRunnable implements Runnable {
@Override
public void run() {
System.out.println("aaa");
}
}
public class Hello {
public static void main(String[] args) {
// 1、完整写法
Thread t = new Thread(new MyRunnable());
t.start();
// 2、省去t
(new Thread(new MyRunnable())).start();
// 3、省去MyRunnable
(new Thread(new Runnable() {
@Override
public void run() {
System.out.println("aaa");
}
})).start();
// 4、省去Runnable、run,只有一行时再继续省略大括号对和分号
(new Thread(() -> System.out.println("aaa"))).start();
}
}
1.1.2 、有参数
interface F{
int x(int a, int b);
}
class Y {
static int fx(int a, int b, F f) {
return f.x(a, b);
}
}
public class Hello {
public static void main(String[] args) {
int y = Y.fx(3, 4, (a, b) -> (a * 3 + b * 4));
System.out.println(y); // 25
}
}
1.2、Scala
(a: Int, b: Int) => a * b - 5
或
_ * _ - 5
第二种写法有个前提:a和b只使用一次
1.3、Python
lambda (a, b): a * b - 5
2、三元表达式
2.1、Java
if (a > b) {
int c = a;
} else {
int c = b;
}
上面可以写成下面(留意?
和:
)
int c = (a > b) ? a : b;
2.2、Scala
val c = if (a > b) a else b
2.3、Python
c = a if a > b else b