Java流及流操作示例
发布日期:2021-05-19 16:45:05 浏览次数:21 分类:精选文章

本文共 1448 字,大约阅读时间需要 4 分钟。

Java中的Stream API是一种基于集合操作的框架,简化了数据处理流程。它与传统的输入输出流不同,Stream不实际存储数据,而是当需要时,按需提供数据源。其操作分为中间操作和终端操作,中间操作返回Stream对象,终端操作处理数据并返回结果。

Stream的特性

  • 不存储数据:Stream不保存数据,所有操作从数据源获取。
  • 懒评估:源数据在需要时才会读取,只有最终操作开始时才会处理。
  • 并行性:支持并行处理,提高性能。
  • 无状态性:不受之前操作影响,所以可以重用流操作多次。

常见操作示例

  • 过滤操作
  • @Test
    public void stream() {
    // 统计红色小组件个数
    System.out.println(widgetList.stream().filter(w -> w.getColor().equals("RED")).count());
    // 统计红色小组件总重
    System.out.println(widgetList.stream().filter(w -> w.getColor().equals("RED")).mapToInt(Widget::getWeight).sum());
    }
    1. 映射操作
    2. @Test
      public void map() {
      // 映射并转换字符串
      Arrays.stream("Hello, world!").map(String::toLowerCase).peek(word -> System.out.println("Mapped value: " + word)).count();
      }
      1. 收集操作
      2. @Test
        public void collect() {
        // 故障恢复统计
        final HashSet
        widgetSet = widgetList.stream().collect(Collectors.UsingConsumer(ArrayList::new));
        System.out.println("Total widgets: " + widgetSet.size());
        }
        1. 排序操作
        2. @Test
          public void stream() {
          // 排序数组
          Integer[] integers = {1, 9, 3, 4, 5, 6, 7, 8, 2, 5};
          // invokedsexy
          List
          integersList = Arrays.asList(integers);
          integersList.stream().sorted().forEach(System.out::println);
          }

          高级操作

          • 并行处理:通过parallel()方法设置流并行性。
          • 时间控制:使用timeout()方法设置操作超时限制。
          • 匹配操作:使用anyMatch()allMatch()noneMatch()方法进行流匹配。
          • 限制和跳过:使用limit(n)skip(n)方法限制或跳过元素数量。

          总结

          Stream API大大简化了数据处理代码,提高了代码的可读性和可维护性。通过灵活的组合中间和终端操作,可以高效处理各种数据聚合任务。不过,需要结合实际场景选择最优操作序列,以发挥Stream的优势。

    上一篇:Spring AOP的实现原理
    下一篇:Java并发系列 | AbstractQueuedSynchronizer源码分析之独占模式

    发表评论

    最新留言

    表示我来过!
    [***.240.166.169]2025年05月05日 13时05分03秒