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)));

  

是不是太简洁了。

 

posted @ 2020-11-20 17:48  百思得其姐  阅读(147)  评论(0)    收藏  举报