stream流链接

什么是stream流?

Java 8 是一个非常成功的版本,这个版本新增的Stream,配合同版本出现的 Lambda ,给我们操作集合(Collection)提供了极大的便利。
那么什么是Stream?
Stream将要处理的元素集合看作一种流,在流的过程中,借助Stream API对流中的元素进行操作,比如:筛选、排序、聚合等。
Stream可以由数组或集合创建,对流的操作分为两种
中间操作,每次返回一个新的流,可以有多个。
终端操作,每个流只能进行一次终端操作,终端操作结束后流无法再次使用。终端操作会产生一个新的集合或值。
另外,Stream有几个特性:

  1. stream不存储数据,而是按照特定的规则对数据进行计算,一般会输出结果。
  2. stream不会改变数据源,通常情况下会产生一个新的集合或一个值。
  3. stream具有延迟执行特性,只有调用终端操作时,中间操作才会执行。

    为什么要用stream流?

    stream流的用法?

    一、stream流的结构图

    QQ截图20210602142832.png

    二、stream的创建

    ```java //Stream可以通过集合数组创建。 //通过 java.util.Collection.stream() 方法用集合创建流 List list = Arrays.asList(“a”, “b”, “c”); // 创建一个顺序流 Stream stream = list.stream(); // 创建一个并行流 Stream parallelStream = list.parallelStream();

//使用java.util.Arrays.stream(T[] array)方法用数组创建流 int[] array={1,3,5,6,8}; IntStream stream = Arrays.stream(array); //使用Stream的静态方法:of()、iterate()、generate()

Stream stream = Stream.of(1, 2, 3, 4, 5, 6);

Stream stream2 = Stream.iterate(0, (x) -> x + 3).limit(4); stream2.forEach(System.out::println);

Stream stream3 = Stream.generate(Math::random).limit(3); stream3.forEach(System.out::println);

  1. streamparallelStream的简单区分: stream是顺序流,由主线程按顺序对流执行操作,而parallelStream是并行流,内部以多线程并行执行的方式对流进行操作,但前提是流中的数据处理没有顺序要求。例如筛选集合中的奇数,两者的处理不同之处:<br />如果流中的数据量足够大,并行流可以加快处速度。
  2. 除了直接创建并行流,还可以通过parallel()把顺序流转换成并行流:
  3. Optional<Integer> findFirst = list.stream().parallel().filter(x->x>6).findFirst();
  4. <a name="U4Aao"></a>
  5. ## 示例代码
  6. ```java
  7. public static void main(String[] args) {
  8. List<Person> personList = new ArrayList<>();
  9. personList.add(new Person("Tom", 8900, "male", "New York"));
  10. personList.add(new Person("Jack", 7000, "male", "Washington"));
  11. personList.add(new Person("Lily", 7800, "female", "Washington"));
  12. personList.add(new Person("Anni", 8200, "female", "New York"));
  13. personList.add(new Person("Owen", 4800, "male", "New York"));
  14. personList.add(new Person("Alisa", 5000, "female", "New York"));
  15. personList.stream().filter(person -> person.getSalary() > 000).collect
  16. (Collectors.toList()).forEach(System.out::println);
  17. }

代码说明,collect(Collectors.toList)是将筛选的数据转换成集合的意思。

collect,reduce聚合操作详解链接%E6%96%B9%E6%B3%95%E7%9A%84%E5%8F%82%E6%95%B0%E7%9A%84%E6%84%8F%E4%B9%89&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-0-.first_rank_v2_pc_rank_v29&spm=1018.2226.3001.4187)

stream流根据对象指定字段去重或者获取重复数据链接

stream的学习链接

stream流筛选map集合根据指定key链接