Lambda 表达式允许把函数作为一个方法的参数(函数作为参数传递进方法中)。
使用 Lambda 表达式可以使代码变的更加简洁紧凑。
语法
lambda 表达式的语法格式如下:
(parameters) -> expression 或 (parameters) ->{ statements; }
以下是lambda表达式的重要特征:
- 可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。
- 可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号。
- 可选的大括号:如果主体包含了一个语句,就不需要使用大括号。
- 可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定表达式返回了一个数值。
主要还是贴几个例子,加深自己的理解
import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; /** * jdk 1.8 新特性 * Lambda 表达式 − Lambda 允许把函数作为一个方法的参数(函数作为参数传递到方法中)。 * lambda 表达式的语法如下: * (parameters) -> expression * 或 * (parameters) ->{ statements; } * * 可以把 Lambda 表达式理解为是一段可以传递的代码(将代码作为实参), * 也可以理解为函数式编程,将一个函数作为参数进行传递。 * */ public class jdkNewFuture { public static void main(String[] args) { List<String> names1 = new ArrayList<>(); names1.add("Gooogle"); names1.add("Runoob"); names1.add("Taobao"); names1.add("Baidu"); names1.add("Sina"); System.out.println("使用jdk7实现排序"); sortByJdk7Grammer(names1); for (String name:names1){ System.out.println(name); } System.out.println("使用jdk8实现排序"); List<String> names2 = new ArrayList<>(); names2.add("Gooogle"); names2.add("Runoob"); names2.add("Taobao"); names2.add("Baidu"); names2.add("Sina"); sortByJdk8Grammer(names2); for (String name:names2){ System.out.println(name); } /** * 使用匿名内部类新建线程 */ new Thread(new Runnable() { @Override public void run() { System.out.println("线程1,基于匿名内部类的线程已经新建!"); } }).start(); /** * 使用labmda表达式新建线程:从上面的正常建立方法可以看出来 * new Thread() 括号里需要传递的是一个Runnable()类型的对象, * 这个对象没有需要传递进去的参数,所以lambda表达式的格式的开头是 ()-> * 然后是{},他的具体逻辑为 执行System.out.println() 操作 * 所以写好之后是() -> System.out.println("线程2,基于lambda表达式的线程已经新建!") * 将这段代码作为 new Thread 的参数 */ new Thread(()-> System.out.println("线程2,基于lambda表达式的线程已经新建!")).start(); } /** * 使用jdk7 实现排序,即重写compare方法 * @param names */ private static void sortByJdk7Grammer(List<String> names){ Collections.sort(names, new Comparator<String>() { @Override public int compare(String o1, String o2) { return o1.compareTo(o2); } }); } /** * 使用lambda表达式 重写排序方法 * 参数为(s1,s2) * 代码执行的逻辑为 s1.compareTo(s2) * 所以修改成lambda表达式之后为(s1,s2)->s1.compareTo(s2) * @param names */ private static void sortByJdk8Grammer(List<String> names){ Collections.sort(names,(s1,s2)->s1.compareTo(s2)); } }
内容来源:
深入理解Java Lambda表达式 - 知乎 (zhihu.com)
Java Lambda 表达式 | 菜鸟教程 (runoob.com)
标签:names2,add,jdk8,线程,println,表达式,lambda From: https://www.cnblogs.com/charler/p/16631704.html