• Java新特性Stream流详解


    一、概述

    Stream流是Java 8
    API添加的一个新的抽象,以一种声明性方式处理数据集合(侧重对于源数据计算能力的封装,并且支持序列与并行两种操作方式)。

    Stream流是对集合(Collection)对象功能的增强,与Lambda表达式结合,可以提高编程效率、间接性和程序可读性。

    二、如何使用Stream流?
    1.创建Stream流。
    (1)Stream创建。

    Stream<String> stream1 = Stream.of("one","two");
    
    • 1

    (2) Collection集合创建。

    List<String> list = Arrays.asList("one","two");
    Stream<String> stream = list.stream(); // 串行Stream
    Stream<String> parallelStream = list.parallelStream(); // 并行Stream
    
    • 1
    • 2
    • 3

    (3)Array数组创建

    String[] strArr = {"one","two"};
     
    Stream arrayStream = Arrays.stream(strArr);
    
    • 1
    • 2
    • 3

    (4) 文件创建

    try {
     
    Stream<String> fileStream = Files.lines(Paths.get("file.txt"), Charset.defaultCharset());
     
    } catch (IOException e) {
     
    e.printStackTrace();
     
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    (5) 函数创建
    generator:

    
    Stream<String> stream = Stream.generate(()->"a").limit(2);
    
    
    • 1
    • 2
    • 3

    generate方法接受一个参数,方法参数类型为Supplier ,由它为流提供值。generate生成的流也是无限流,因此通过limit对流进行了截断。

    iterator:

    Stream<Integer> iterateStream = Stream.iterate(0, s -> s + 2).limit(3);
    
    • 1

    iterate方法接受两个参数,第一个为初始化值,第二个为进行的函数操作,因为iterator生成的流为无限流,通过limit方法对流进行了截断,只生成3个偶数。

    2.操作Stream。
    常用的Stream操作包括:过滤、映射、排序、去重、计数、归约等等。
    filter:
    过滤方法filter用于对Stream中的元素进行筛选,只保留符合指定条件的元素,如下:

    List<String> list = Arrays.asList("one","two","three");
    Stream<String> stream = list.stream().filter(s -> s.length() > 3);
    
    • 1
    • 2

    map:使用map方法可以将流中的元素映射到另一个值。例如,将一个字符串列表中的元素转换为大写:

    List<String> names = Arrays.asList("one","two","three");
    List<String> upperCaseNames = names.stream().map(String::toUpperCase).collect(Collectors.toList());
    
    
    • 1
    • 2
    • 3

    sorted:使用sorted方法可以对流中的元素进行排序。例如,对一个整数列表进行升序排序:

    List<Integer> numbers = Arrays.asList(1, 3, 5, 1, 7);
    List<Integer> sortedNumbers = numbers.stream().sorted().collect(Collectors.toList());
    
    
    • 1
    • 2
    • 3

    distinct: distinct用于将Stream中的重复元素去除,只保留一个:

    List<Integer> numbers = Arrays.asList(2, 7, 1, 1, 7);
    List<Integer> sortedNumbers = numbers.stream().distinct().collect(Collectors.toList());
    
    • 1
    • 2

    count: 计数方法count用于返回Stream中元素的数量,返回值为long类型。

    List<String> list = Arrays.asList("one","two","three");
    long count = list.stream().count();
    
    
    • 1
    • 2
    • 3

    reduce: reduce用于将Stream中的元素归约成一个值,例如求和、求最大值等。例如,计算一个整数列表的总和:

    List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
    int sum = numbers.stream().reduce(0, Integer::sum);
    
    
    • 1
    • 2
    • 3

    forEach: forEach方法用于对Stream中的每个元素执行指定的操作。

    List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
    list.stream().forEach(System.out::println);
    
    
    • 1
    • 2
    • 3

    collect:使用collect方法可以将流中的元素收集到一个集合中。例如,将一个字符串列表中的元素收集到一个新的列表中:

    List<String> names = Arrays.asList("one","two","three");
    List<String> collectedNames = names.stream().collect(Collectors.toList());
    
    
    • 1
    • 2
    • 3

    总结:
    Stream是Java 8中非常重要的一个API,本文详细介绍了Java Stream流的概念、使用方法。通过Stream流,开发人员可以以声明式的方式对数据进行操作,使代码更加简洁、易读。我们还介绍了Stream流的常用操作方法使用
    通过充分利用Stream流的特性和优势,开发人员可以编写更加优雅、高效的数据处理代码。

  • 相关阅读:
    Eth-Trunk链路聚合理论
    C++简易Tensor实现
    spring 理解
    Apache Ant的安装
    MySQL 正则判断匹配
    LInux课堂笔记
    探秘前后端开发世界:猫头虎带你穿梭编程的繁忙街区,解锁全栈之路
    基于Spring Boot应用Java的Stream流API
    【《高性能 MySQL》摘录】第 8 章 优化服务器设置
    【请求报错:javax.net.ssl.SSLHandshakeException: No appropriate protocol】
  • 原文地址:https://blog.csdn.net/qq_42077317/article/details/133796258