ChatGPT:Stream 和 传统遍历循环的对比

ChatGPT:Stream 和 传统遍历循环的对比



传统循环遍历代码

假设我们有一个 List<String>,我们希望对它进行排序,然后筛选出以 “a” 开头的元素,并打印它们。传统的循环遍历代码可能如下:

List<String> stringList = Arrays.asList("bbb", "aaa2", "ccc", "aaa1");

// 排序
List<String> sortedList = new ArrayList<>(stringList);
Collections.sort(sortedList);

// 筛选
List<String> filteredList = new ArrayList<>();
for (String s : sortedList) {
    if (s.startsWith("a")) {
        filteredList.add(s);
    }
}

// 打印
for (String s : filteredList) {
    System.out.println(s);
}
使用 Stream API 的代码

使用 Stream API,可以将上述操作链式地写成:

List<String> stringList = Arrays.asList("bbb", "aaa2", "ccc", "aaa1");

stringList.stream()
          .sorted()
          .filter(s -> s.startsWith("a"))
          .forEach(System.out::println);
比较与分析
1. 代码简洁性
  • 传统方法:需要多个步骤(排序、筛选、打印),每个步骤都需要明确的循环结构和临时集合。
  • Stream 方法:使用链式调用,减少了显式的循环和临时集合的创建,使代码更加简洁和易读。
2. 中间结果的处理
  • 传统方法:每个步骤的中间结果都需要显式存储在集合中(如 sortedListfilteredList),这会增加内存消耗。
  • Stream 方法:中间操作是惰性求值的,不会立即生成中间结果。只有在终端操作触发时,所有操作才会按需执行,并不会显式存储中间结果,避免了不必要的内存消耗。
3. 性能优化
  • 惰性求值(Lazy Evaluation):Stream 的中间操作(如 sortedfilter)都是惰性求值的,意味着它们只是记录了操作,而不会立即执行。只有在遇到终端操作(如 forEach)时,才会遍历数据并执行所有中间操作。这避免了不必要的计算和内存使用。
  • 优化执行顺序:在流处理中,可以将多个操作结合起来一次遍历完成。例如,在传统方法中,排序和筛选是分两步完成的。而在 Stream 中,这些操作是可以组合在一起完成的,减少了遍历次数。
4. 并行处理
  • 传统方法:需要手动处理多线程并发,代码复杂度高,容易出错。
  • Stream 方法:通过简单地调用 parallelStream(),可以轻松实现数据的并行处理,利用多核 CPU 提高性能。
5. 可读性和可维护性
  • 传统方法:由于步骤多且显式操作中间集合,代码复杂且容易出错。
  • Stream 方法:链式调用使得逻辑更加清晰,一目了然,更容易维护和修改。

  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中,可以使用Stream流来遍历集合类。首先,需要将集合类转换为流对象,然后可以使用流的各种操作来遍历和处理元素。引用展示了一个使用Stream遍历集合的示例代码。在这个例子中,通过调用Stream的of方法创建了一个包含字符串元素的流对象。然后,可以使用collect方法将流对象收集到不同类型的集合中。例如,可以使用Collectors.toList()方法将流对象收集到List集合中,使用Collectors.toSet()方法将流对象收集到Set集合中。引用展示了这些方法的具体使用。 另外,对于已有的集合对象,也可以通过调用集合类的stream()方法来获取相应的流对象。例如,可以使用Map集合的keySet()方法获取键的流对象,然后进行遍历和处理。引用展示了如何通过keySet().stream()方法获取Map集合键的流对象。 综上所述,要使用Java集合类的Stream流进行遍历,首先需要将集合对象转换为流对象,然后可以使用流的各种操作方法来处理和遍历元素。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [java8新特性之Steam(告别繁琐的循环遍历)](https://blog.csdn.net/wanghaiping1993/article/details/125284521)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值