当前位置: 首页 > 知识库问答 >
问题:

Java 8使用Stream“filter”和“collect”后会创建新的列表吗?

宿嘉
2023-03-14

我有使用Java8的代码:

List<Integer> list = new ArrayList<Integer>();
list.add(3);
list.add(5);
list.add(4);
list.add(2);
list.add(5);
list = list.stream().filter(i -> i >= 3).collect(Collectors.toList());

原始列表是 [3, 5, 4, 2, 5]。执行“筛选”和“收集”操作后,列表将更改为 [3, 5, 4, 5]。

是否所有操作都对原始列表执行,并且不创建新列表?还是在“过滤”和“收集”操作之后,返回新创建的列表并忽略原始列表?

共有3个答案

沃驰
2023-03-14

流操作是中间操作或终端操作。中间操作返回一个流,以便您可以链接多个中间操作。终端操作返回无效或其他内容。

大多数流操作都是无干扰的,这意味着它们不会修改流的数据源。但是,通过调用collect方法,您正在创建一个新列表,并将其分配给列表

鲁阳焱
2023-03-14

如果确实要修改原始列表,请考虑使用removeIf

list.removeIf(i -> i < 2);
井通
2023-03-14

根据Javadoc,将Collectors.toList()返回的Collector传递到Collection方法中将创建一个新列表。

公共静态

返回一个< code >收集器,它将输入元素累积到一个新的< code >列表中。不保证返回的< code>List的类型、可变性、可序列化性或线程安全性。如果需要对返回的< code >列表进行更多控制,请使用< code > to collection(Supplier)。

原始列表不受影响。

 类似资料:
  • 例如,有两个列表: 使用Stream,我想创建一个由这些列表组成的映射,其中清单1是键,清单2是值。要做到这一点,我需要创建一个辅助列表: list0按List1::Get和List2::Get的顺序使用。有没有一种不创建list0的更简单的方法?我尝试了以下代码,但没有起作用:

  • 本文向大家介绍java8新特性之stream的collect实战教程,包括了java8新特性之stream的collect实战教程的使用技巧和注意事项,需要的朋友参考一下 1、list转换成list 不带return方式 List<Long> ids=wrongTmpList.stream().map(c->c.getId()).collect(Collectors.toList()); 带ret

  • 本文向大家介绍JAVA8 STREAM COLLECT GROUPBY分组实例解析,包括了JAVA8 STREAM COLLECT GROUPBY分组实例解析的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了JAVA8 STREAM COLLECT GROUPBY分组实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 实体类Peop

  • 概述 Stream 是 Java8 中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等操作。 简而言之,Stream API 提供了一种高效且易于使用的处理数据的方式。 特点 不是数据结构,不会保存数据。 不会修改原来的数据源,它会将操作后的数据保存到另外一个对象中。 惰性求值,流在中间处理过程中,只是对操作进行了记录,并不会立即执行,需要等到执行

  • 我有一个学生名单a和学生名单B。 学生对象包含如下字段:否、年龄、城市、出生日期、工资 我的列表A包含这些对象 我的列表B包含这些对象 我想做的是提取ListA有但listB没有的学生对象,以及ListA和listB有但薪水不同的学生对象(如否、年龄、城市)。我还想写工资差异。 我想在java 8中使用流api。首先,我想将students对象提取到列表中,但我现在可以提取常见的student对象

  • 我有以下课程: 我想使用Java流创建一个