A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© yqw_gz_java 中级黑马   /  2020-3-18 23:25  /  4616 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 yqw_gz_java 于 2020-3-19 09:47 编辑

Stream 作为 Java 8 的一大亮点,它与 java.io 包里的 InputStream 和 OutputStream 是完全不同的概念。它也不同于 StAX 对 XML 解析的 Stream,也不是 Amazon Kinesis 对大数据实时处理的 Stream。Java 8 中的 Stream 是对集合(Collection)对象功能的增强,它专注于对集合对象进行各种非常便利、高效的聚合操作(aggregate operation),或者大批量数据操作 (bulk data operation)。Stream API 借助于同样新出现的 Lambda 表达式,极大的提高编程效率和程序可读性。同时它提供串行和并行两种模式进行汇聚操作,并发模式能够充分利用多核处理器的优势,使用 fork/join 并行方式来拆分任务和加速处理过程。通常编写并行代码很难而且容易出错, 但使用 Stream API 无需编写一行多线程的代码,就可以很方便地写出高性能的并发程序。所以说,Java 8 中首次出现的 java.util.stream 是一个函数式语言+多核时代综合影响的产物流的构成
当我们使用一个流的时候,通常包括三个基本步骤:
获取一个数据源(source)→ 数据转换→执行操作获取想要的结果,每次转换原有 Stream 对象不改变,返回一个新的 Stream 对象(可以有多次转换),这就允许对其操作可以像链条一样排列,变成一个管道
有多种方式生成 Stream Source
  • 从 Collection 和数组
  • [size=1.0625]Collection.stream()
  • Collection.parallelStream()
  • Arrays.stream(T array) or Stream.of()从 BufferedReader
  • java.io.BufferedReader.lines()
  • [Java] 纯文本查看 复制代码
            int[] buf={1,2,3,4,5,6,7};
            IntStream stream = Arrays.stream(buf);
            Stream<int[]> buf1 = Stream.of(buf);
            List<String> list =new ArrayList();
            Stream<String> stream1 = list.stream();
            Stream<List<String>> list1 = Stream.of(list);
            Stream<String> stringStream = list.parallelStream();
            BufferedReader bufferedReader = new BufferedReader(new FileReader(new File("/abc")));
            Stream<String> lines = bufferedReader.lines();

静态工厂
  • java.util.stream.IntStream.range()
  • java.nio.file.Files.walk()
  • [AppleScript] 纯文本查看 复制代码
            IntStream range = IntStream.range(2, 30);
            Path path = Paths.get("/abc");
            Stream<Path> walk = Files.walk(path);
    

流的构造与转换
[Java] 纯文本查看 复制代码
        IntStream.of(new int[]{1, 2, 3}).forEach(System.out::println);
        IntStream.range(1, 3).forEach(System.out::println);
        IntStream.rangeClosed(1, 3).forEach(System.out::println);

[Java] 纯文本查看 复制代码
// 1. Array
String[] strArray1 = stream.toArray(String[]::new);
// 2. Collection
List<String> list1 = stream.collect(Collectors.toList());
List<String> list2 = stream.collect(Collectors.toCollection(ArrayList::new));
Set set1 = stream.collect(Collectors.toSet());
Stack stack1 = stream.collect(Collectors.toCollection(Stack::new));
// 3. String
String str = stream.collect(Collectors.joining()).toString();

map/flatMap  转大写
[Java] 纯文本查看 复制代码
        List<String> wordList=new ArrayList<>();
        wordList.add("a");
        wordList.add("b");
        wordList.add("c");
        List<String> collect = wordList.stream().
                map(String::toUpperCase).
                collect(Collectors.toList());

平方操作
[Java] 纯文本查看 复制代码
        //平方
        List<Integer> nums = Arrays.asList(1, 2, 3, 4);
        List<Integer> squareNums = nums.stream().
                map(n -> n * n).
                collect(Collectors.toList());





0 个回复

您需要登录后才可以回帖 登录 | 加入黑马