一篇文章快速搞懂Java Lambda表达式

Java Lambda表达式是Java8 引入的一个新的特性,它类似于JavaScript中的闭包,主要目的是让我们的代码变的更加简洁紧凑。

1. Lambda 基本语法

Lambda 的基本语法格式如下两种形式:

(parameters) -> expression
或
(parameters) ->{ statements; }

其中,包括几项重要特征:

  • 编译器可以统一识别参数,不需要指定类型 例如(a) - > System.out.println(a)
  • 当只有一个参数时,不用写括号 例如a ->System.out.println(a)
  • 参数可以为空 () ->System.out.println("hello world")
  • 参数指定类型时,必须有括号 (String a) -> System.out.println("hello world")

常见实例

// 1. 不需要参数,返回值为 5  
() -> 5  
  
// 2. 接收一个参数(数字类型),返回其2倍的值  
x -> 2 * x  
  
// 3. 接受2个参数(数字),并返回他们的差值  
(x, y) -> x – y  
  
// 4. 接收2个int型整数,返回他们的和  
(int x, int y) -> x + y  
  
// 5. 接受一个 string 对象,并在控制台打印,不返回任何值(看起来像是返回void)  
(String s) -> System.out.print(s)

2. Lambda 的作用

Lambda 主要是以函数式接口为基础,来定义内执行的方法的接口。免去了使用匿名方法的麻烦,给Java赋予了强大的函数化编程能力
举例
以前我们新建一个Thread,Runnable接口是我们操作多线程时的一个常用的接口,只包含void run()方法。在以前,我们如果新建一个线程,需要如下写法:

new Thread(new Runnable() {
    @Override
    public void run() {
        System.out.println("Hello world;");
    }
}).start();

现在,有个Lambda表达式,就可以非常简介的写出上述代码:

new Thread(() -> System.out.println("Hello world")).start();

也可以写成

Runnable r = () -> System.out.println("Hello World");
new Thread(r).start();

还有一个我们常用的比较器

        Integer a[] = {8,3,7,1,7,4,2,7};
        Arrays.sort(a, new Comparator<Integer>() {
            @Override
            public int compare(Integer integer, Integer t1) {
                return integer - t1;
            }
        });

现在可以写成

Integer a[] = {8,3,7,1,7,4,2,7};
Arrays.sort(a, (a1 , a2)-> a1-a2);

3. Stream 对象

Stream 对象也是java8新添加的一个新加入的API,主要用于对Collection对象功能的增强,对各种集合对象进行各种非常遍历、高效地聚合或大批量操作。Stream API通过借助Lambda表达式,可以极大的提高编程效率喝程序可读性。
包括的主要方法:
forEach 用来迭代流中的每个元组,下面是例子:

List<String> strings = Arrays.asList("abc", "123", "bc", "efg", "abcd","", "jkl");
//逐个打印集合中的元素
strings.stream().forEach(System.out::println);

map用来映射每个元素到对应的结果

List<Integer> list = Arrays.asList(1,2,3,4,5);
//把list中的所有元素加2
List<Integer> slist = list.stream().map(i->i+2).collect(Collectors.toList());

filter用于通过设置好的条件对集合中的元素进行过滤

        List<String>strings = Arrays.asList("abc", "12313123", "bc", "efg", "abcd","", "jkl");
// 获取长度大于3的字符串的数量
        long count = strings.stream().filter(string -> string.length() > 3).count();

limit 用于获取指定数量的流

List<String> strings = Arrays.asList("abc", "123", "bc", "efg", "abcd","", "jkl");
//打印集合中的3条元素
strings.stream()limit(3).forEach(System.out::println);

sorted 方法用于对流进行排序。

List<String> strings = Arrays.asList("abc", "12313123", "bc", "efg", "abcd","", "jkl");
//正序
strings.stream().sorted().forEach(System.out::println);
//倒序   strings.stream().sorted(Comparator.reverseOrder()).forEach(System.out::println);
发布了34 篇原创文章 · 获赞 79 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_36008321/article/details/104851647