java8新特性学习
Lambda表达式:
Lambda表达式语法基础:
关键运算符: ->
(箭头操作符或Lambda 操作符)
格式:Lambda 表达式参数列表 -> Lambda 表达式中所需要执行的功能,即Lambda 体
语法格式一:无参数,无返回值。
() ->System.out.println(“Hello”);
语法格式二:有一个参数,并且无返回值。
(e) -> System.out.println(e);
语法格式三:若只有一个参数,参数的小括号可以省略。
e -> System.out.println(e);
语法格式四:有两个以上的参数,又返回值,有多条执行语句。
(x,y)-> {
System.out.println(“Lambda”);
return Integer.compare(x,y);
};
语法格式五:如果有两个以上的参数,又返回值,只有一条执行语句,Lambda 体的大括号和return可以省略。
Comparator
语法格式六:Lambda表达式的参数列表的数据类型可以省略不写,因为JVM编译器可以通过上下文推断出数据类型,即“类型推断”。
(Integer x,Integery)->Integer.compare(x,y);
函数式接口:
Lambda表达式函数式接口的使用情景:
函数式接口:只定义一个抽象方法的接口
如:
1 |
|
1 | //使用案例 |
Stream:
Stream(流)是一个来自数据源的元素队列并支持聚合操作
我们通常对数组
、集合
等数据进行stream操作
在进行流操作前,我们需要将这些数据流化,即data.stream()
得到数据的流对象后,我们才能使用Stream中的API对其进行操作!
以下是一些常用的API:
map
map 方法用于映射每个元素到对应的结果,以下代码片段使用 map 输出了元素对应的平方数:
1
2
3List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5);
// 获取对应的平方数
List<Integer> squaresList = numbers.stream().map( i -> i*i).distinct().collect(Collectors.toList());filter
filter 方法用于通过设置的条件过滤出元素。以下代码片段使用 filter 方法过滤出空字符串:
1
2
3List<String>strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
// 获取空字符串的数量
long count = strings.stream().filter(string -> string.isEmpty()).count();limit
limit 方法用于获取指定数量的流。 以下代码片段使用 limit 方法打印出 10 条数据:
1
2Random random = new Random();
random.ints().limit(10).forEach(System.out::println);sorted
sorted 方法用于对流进行排序。以下代码片段使用 sorted 方法对输出的 10 个随机数进行排序:
1
2Random random = new Random();
random.ints().limit(10).sorted().forEach(System.out::println);
综合例子🌰:
1 | public static List<People> createPeople(){ |
本文为小白作者对java8新特性中的Lambda表达式以及Stream相关API的粗浅了解,仅仅介绍了一些常见的用法,详细的用法以及底层实现原理并未深究,
参考文章: