Java Lambda 表达式
今天我们来分享一下lambda表达式
总结一下lambda表达式有什么特点:
看着高级,减少代码量。不懂的人看不懂。
今天我们就变成懂的人。
Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。
Lambda表达式重要特征:
- 可选类型声明:不需要声明参数类型,编译器可以同一识别参数值。
- 可选的参数圆括号:一个参数无需定义园括号,但多个参数需要定义圆括号。
- 可选的大括号:如果主体包含了一个语句,就不需要使用大括号。
- 可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指明表达式返回了一个数值。
我们来准备一下环境吧:
安装java8,开发工具根据自己的习惯吧。我用的IntelliJ IDEA 。
lambda表达式的基本语法
(parameters) -> expression
或
(parameters) ->{ statements; }
// 不需要参数,返回值为 3 () -> 3 // 接收一个参数x(数字类型),返回其2倍的x 上面说过单个参数可以省略() x -> 2 * x // 2个参数(数字),并返回他们的差值 省略类型 (x, y) -> x – y // 2个int型整数,返回他们的和 (int x, int y) -> x + y // 一个 string 对象,并在控制台打印,不返回任何值 (String s) -> System.out.print(s)
下面来使用一下
public static void main(String[] args) {
String[] lmd= {"b","a","f","d","e"};
List<String> lmds = Arrays.asList(lmd);
}
如果让你遍历一下lmds数据,你会怎么做 ?
使用for循环?no no no no
public static void main(String[] args) {
String[] lmd= {"b","a","f","d","e"};
List<String> lmds = Arrays.asList(lmd);
lmds.forEach((lmds) -> System.out.println(lmds + "; "));
lmds.forEach(System.out::println);
}
不害怕的话运行一下试试。
是不是简洁了很多,多看几眼,以后见了就认识了。
再来试一个匿名内部类Runnable
public static void main(String[] args) { new Thread(new Runnable() { @Override public void run() { System.out.println("Hello world !"); } }).start(); }
完全不用思考的写出了上面的代码,太简单了。
如果使用lambda表达式怎么实现呢。
new Thread(() -> {System.out.println("Hello world !");}).start();
有简洁了好多。在这里只要执行一行代码,所以{}是可以省略的。new Thread(() -> System.out.println("Hello world !")).start(); 自己运行一下。
下面我们对集合进行排序
public static void main(String[] args) {
String[] lmd= {"b","a","f","d","e"};
Arrays.sort(lmd,new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return (o1.compareTo(o2));
}
});
}
那么lambda表达式怎么写呢?
String[] lmd= {"b","a","f","d","e"};
//第一种方式
Comparator<String> sortByName = (String s1, String s2) -> (s1.compareTo(s2));
Arrays.sort(lmd, sortByName);
//第二种方式
Arrays.sort(lmd,(s0,s1) -> (s0.compareTo(s1)));
是不是太简洁了。

浙公网安备 33010602011771号