一、什么是Stream和Lambda表达式
在Java8之前,我们需要遍历一个List的元素,通常要用for循环,然后对List中每个元素进行相应的操作。而在Java8中引入了Stream和Lambda表达式的概念,使得我们可以更加便捷地完成这些操作。
Stream是Java8新增的一个API,它允许我们对一个元素序列进行各种操作,比如筛选、排序、映射等等。而Lambda表达式则是一种匿名函数,它可以代替Java中的匿名内部类,并提供了更加简洁高效的操作。
放在List上,我们可以通过Stream和Lambda表达式来完成一些常见的操作,比如对List进行过滤、映射和排序。
二、Stream的常见用法
1. 过滤
List<String> list = Arrays.asList("apple", "banana", "orange", "pear");
List<String> filteredList = list.stream().filter(s -> s.startsWith("a")).collect(Collectors.toList());
System.out.println(filteredList);
代码中首先创建了一个字符串List,然后使用Stream的filter方法来过滤以a开头的字符串,并通过collect方法将结果转换成List类型。
2. 映射
List<String> list = Arrays.asList("apple", "banana", "orange", "pear");
List<Integer> lengthList = list.stream().map(String::length).collect(Collectors.toList());
System.out.println(lengthList);
代码中首先创建了一个字符串List,然后使用Stream的map方法来将每个字符串映射成它的长度,并通过collect方法将结果转换成List类型。
3. 排序
List<String> list = Arrays.asList("apple", "banana", "orange", "pear");
List<String> sortedList = list.stream().sorted().collect(Collectors.toList());
System.out.println(sortedList);
代码中首先创建了一个字符串List,然后使用Stream的sorted方法来对List中的元素进行排序,最后通过collect方法将结果转换成List类型。
三、Lambda表达式的常见用法
1. forEach
List<String> list = Arrays.asList("apple", "banana", "orange", "pear");
list.forEach(s -> System.out.println(s));
代码中首先创建了一个字符串List,然后使用forEach方法和Lambda表达式来遍历List中的元素,并在控制台上打印出来。
2. reduce
List<Integer> list = Arrays.asList(1, 2, 3, 4);
int sum = list.stream().reduce(0, (a, b) -> a + b);
System.out.println(sum);
代码中首先创建了一个整数List,然后使用reduce方法和Lambda表达式来对List中的元素进行累计求和,并将结果输出。
3. Predicate
List<String> list = Arrays.asList("apple", "banana", "orange", "pear");
Predicate<String> predicate = s -> s.startsWith("a");
List<String> filteredList = list.stream().filter(predicate).collect(Collectors.toList());
System.out.println(filteredList);
代码中首先创建了一个字符串List,然后使用Predicate和Stream的filter方法来筛选以a开头的字符串,并通过collect方法将结果转换成List类型。
四、总结
Stream和Lambda表达式是Java8中的重要特性,它们能够使我们更加轻松地完成一些常见的操作,比如List的过滤、映射和排序。通过掌握这些用法,我们可以让我们的代码变得更加简洁、高效。