Stream流详解(9大Stream流用法)

Stream流详解(9大Stream流用法)-mikechen

Stream流是Java8新增特性,下面我就来详解Stream流的常用9大用法@mikechen

Stream流定义

Stream流是Java 8中引入的一种处理集合数据的API,它提供了一种更加简洁、高效的方式来处理集合数据。

 

Stream流作用

Stream可以代替传统的for循环和迭代器,可以进行筛选、排序、映射、汇聚等操作,并且支持并行处理。

另外,Stream流还可以与Lambda表达式和方法引用结合使用,这样可以更加方便地对集合数据进行处理。

总的来说,Stream流的作用:是一种简单而高效的处理集合数据的方式,可以大大简化代码,同时还可以提高代码的性能。

 

Stream流用法

Stream流有多种用法,下面列举一些常见的用法:

1. 过滤(filter)

filter方法可以从Stream中过滤出满足条件的元素。

例如:过滤出长度大于3的字符串

mathematicaCopy codeList list = Arrays.asList("apple", "banana", "cherry");
list.stream()
    .filter(s -> s.length() > 3)
    .forEach(System.out::println);

 

2.转换(map)

map方法可以将Stream中的元素转换成另外一种类型。

例如:将字符串转换成大写形式

mathematicaCopy codeList list = Arrays.asList("apple", "banana", "cherry");
list.stream()
    .map(String::toUpperCase)
    .forEach(System.out::println);

 

3.排序(sorted)

sorted方法可以对Stream中的元素进行排序,例如:按照字符串长度进行升序排序。

lessCopy codeList<String> list = Arrays.asList("apple", "banana", "cherry");
list.stream()
    .sorted((s1, s2) -> s1.length() - s2.length())
    .forEach(System.out::println);

 

4.去重(distinct)

distinct方法可以去掉Stream中的重复元素,例如:去重后输出字符串长度。

mathematicaCopy codeList list = Arrays.asList("apple", "banana", "cherry", "banana", "apple");
list.stream()
    .distinct()
    .map(String::length)
    .forEach(System.out::println);

 

5.截取(limit)

limit方法可以截取Stream中的前n个元素,例如:截取前2个元素并输出。

mathematicaCopy codeList list = Arrays.asList("apple", "banana", "cherry");
list.stream()
    .limit(2)
    .forEach(System.out::println);

 

6.跳过(skip)

skip方法可以跳过Stream中的前n个元素,例如:跳过前2个元素并输出。

mathematicaCopy codeList list = Arrays.asList("apple", "banana", "cherry");
list.stream()
    .skip(2)
    .forEach(System.out::println);

 

7.汇聚(reduce)

reduce方法可以将Stream中的元素汇聚成一个结果,例如:计算字符串长度之和。

mathematicaCopy codeList list = Arrays.asList("apple", "banana", "cherry");
int sum = list.stream()
            .mapToInt(String::length)
            .reduce(0, Integer::sum);
System.out.println(sum);

 

8.收集(collect)

collect方法可以将Stream中的元素收集到一个集合中。

例如:将长度大于3的字符串收集到一个新的List中。

mathematicaCopy codeList list = Arrays.asList("apple", "banana", "cherry");
List result = list.stream()
                        .filter(s -> s.length() > 3)
                        .collect(Collectors.toList());
System.out.println(result);

9.forEach

Stream 的 forEach() 方法可以用来遍历 Stream 中的每一个元素,并对每个元素执行指定的操作。

例如,以下代码使用 forEach() 方法遍历一个整型列表,并打印每个元素的值:

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);

numbers.stream()
        .forEach(num -> System.out.println(num));

另外,Stream支持并行处理,可以通过parallel方法将一个串行的Stream转换。

以上就是Stream流详解,更多Java8新特性,请查看:Java8新特性详解(9大新特性)

陈睿mikechen

10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获取更多技术干货!

后台回复面试即可获取《史上最全阿里Java面试题总结》,后台回复架构,即可获取《阿里架构师进阶专题全部合集

评论交流
    说说你的看法