【Java进阶】之Java8新特性Lambda表达式

2018-07-26  本文已影响0人  jobnicer

自从Java8出现以来,受到开发者青睐的要属它的Lambda表达式啦。Lambda表达式的出现,有两大明显的优点:一是程序员开发的代码量大大减少;二是由于Lambda表达式本身新的特性会使代码的运行效率大幅度提升。

Lambda表达式特性

Lambda语法

1. 基本语法

(parameters) -> expression 或 (parameters) ->{ statements; }
即: 参数 -> 带返回值的表达式/无返回值的陈述

2.语法详解

根据上面的描述,我们可以简单的抽象一下Lambda表达式的一般语法:

(Type1 param1, Type2 param2, ..., TypeN paramN) -> {
   statment1;
   statment2;
   //.............
   return statmentM;
}
// 对一个字符串列表,将字符串包含的字符串都转换为小写
List<String> lowercaseNames = names.stream().map((String name) -> {return name.toLowerCase();}).collect(Collectors.toList());

根据上面的语义,可以将Lambda表达式简单的理解为“一段带有参数的可执行语句块”。
上面的Lambda表达式语法可以认为是最全的版本,写起来还是稍稍有些繁琐。别着急,下面陆续介绍一下Lambda表达式的各种简化版:

(param1,param2, ..., paramN) -> {
  statment1;
  statment2;
  //.............
  return statmentM;
}
List<String> lowercaseNames = names.stream().map((name) -> {return name.toLowerCase();}).collect(Collectors.toList());
 param1 -> {
  statment1;
  statment2;
  //.............
  return statmentM;
} 
List<String> lowercaseNames = names.stream().map(name -> {return name.toLowerCase();}).collect(Collectors.toList());  
param1 -> statment
List<String> lowercaseNames = names.stream().map(name -> name.toLowerCase()).collect(Collectors.toList());
List<String> lowercaseNames = names.stream().map(String::toLowerCase).collect(Collectors.toList());

stream API简单介绍

1.什么是stream

简单而言,stream就是JAVA8提供的对于元素集合统一、快速、并行的一种方法。它能充分运用多核的优势,以及配合lambda表达式、链式结构对集合等进行许多有用的操作。
概念
可以支持顺序和并行对原始操作的元素集合。
作用
提供了一种操作[大数据]接口,让数据操作更容易和更快使用stream,从而能够对collection的元素进行过滤、映射、排序、去重等许多操作。
中间方法和终点方法
它具有过滤、映射以及减少遍历数等方法,这些方法分两种:中间方法和终端方法。
“流”抽象天生就该是持续的,中间方法永远返回的是stream,因此如果我们要获取最终结果的话,必须使用终点操作才能收集流产生的最终结果。区分这两个方法是看他的返回值,如果是stream则是中间方法,否则是终点方法。

2.如何使用stream

3.常见的中间方法

中间方法即是对元素进行的操作,例如过滤、去重、转换、截取等。

//过滤18岁以上的人
List persons = …
//注意!此处返回的是Stream
Stream personsOver18 = persons.stream().filter(p -> p.getAge() > 18); 
//把person转成Adult
Stream map = persons.stream().filter(p -> p.getAge() > 18).map(person -> new Adult(person)); 

4.常见的终点方法

通过中间方法,我们对stream进行了一系列的操作,但得到的还是一个stream。要是想把它转为新的集合或者是统计结果,我们需要使用终点方法。

int countOfAdult=persons.stream().filter(p -> p.getAge() > 18)
.map(person -> new Adult(person))
.count();
List adultList= persons.stream().filter(p -> p.getAge() > 18)
.map(person -> new Adult(person))
.collect(Collectors.toList());
上一篇 下一篇

猜你喜欢

热点阅读