目录

  • 一.Stream.generate()
    • 1.1 生成实体类对象List
    • 1.2 生成5个0到指定范围内的随机整数
    • 1.3 生成指定5个范围内的随机整数
    • 1.4 生成5个随机三位数
  • 二.Stream.iterate()
    • 2.1 生成等差数列
    • 2.2 生成空字符串List
  • 三.IntStream.rangeClosed()
    • 3.1 生成指定范围内的数组
    • 3.2 递增生成姓名List
    • 3.3 生成有参构造实体类List
    • 3.4 生成实体类对象List,并指定实体类内的属性对象值

❗❗❗Stream.generate和Stream.iterate()都要配合.limit()来使用,确保生成的元素的数量


一.Stream.generate()

1.1 生成实体类对象List

⏹生成Person对象List

import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;@Data
@AllArgsConstructor
@NoArgsConstructor
public class Person {private String id;private String email;private List<House> houseList;
}// 生成4个无参构造Person对象
List<Person> personList = Stream.generate(Person::new).limit(4).collect(Collectors.toList());
System.out.println(personList);

1.2 生成5个0到指定范围内的随机整数

⏹生成5个范围在0到20的整数,nextInt(20)表示[0,20),不包含20,因此需要 +1

List<Integer> list2 = Stream.generate(() -> new Random().nextInt(20) + 1).limit(5).collect(Collectors.toList());
System.out.println(list2);  // [10, 5, 8, 16, 18]

1.3 生成指定5个范围内的随机整数

⏹生成区间 [64,128] 中随机值
指定范围内的取值公式 : new Random().nextInt(MAX - MIN + 1) + MIN;

final int[] intArray1 = IntStream.generate(() -> new Random().nextInt(128 - 64 + 1) + 64).limit(5).toArray();
System.out.println(Arrays.toString(intArray1));  // [96, 83, 119, 71, 73]

1.4 生成5个随机三位数

⏹随机生成5个3位整数

final int[] intArray2 = IntStream.generate(() -> new Random().nextInt(900) + 100).limit(5).toArray();
System.out.println(Arrays.toString(intArray2));  // [457, 328, 454, 965, 501]

二.Stream.iterate()

iterate 跟 reduce 操作很像

2.1 生成等差数列

⏹生成5个从0开始的等差数列元素

List<Integer> list3 = Stream.iterate(0, n -> n + 3).limit(5).collect(Collectors.toList());
System.out.println(list3);  // [0, 3, 6, 9, 12]

2.2 生成空字符串List

⏹生成一个包含5个空字符串的List集合

final List<String> list4 = Stream.iterate("", item -> item).limit(5).collect(Collectors.toList());
System.out.println(list4);  // [, , , , ]

三.IntStream.rangeClosed()

3.1 生成指定范围内的数组

⏹生成一个从1到10的数组 [start, end]

final int[] ints1 = IntStream.rangeClosed(1, 10).toArray();
System.out.println(Arrays.toString(ints1));
// [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

⏹生成一个从1到9的数组 [start, end)

final int[] ints2 = IntStream.range(1, 10).toArray();
System.out.println(Arrays.toString(ints2));
// [1, 2, 3, 4, 5, 6, 7, 8, 9]

3.2 递增生成姓名List

List<String> names = IntStream.rangeClosed(1, 4).mapToObj(i -> "姓名" + i).collect(Collectors.toList());
System.out.println(names);  // [姓名1, 姓名2, 姓名3, 姓名4]

3.3 生成有参构造实体类List

import lombok.Data;
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;import java.util.List;@Data
@AllArgsConstructor
@NoArgsConstructor
public class Person {private String id;private String email;private List<House> houseList;
}
// 生成4个Person对象,并指定对象的id
List<Person> personList2 = IntStream.rangeClosed(1, 4).mapToObj(item -> new Person(String.valueOf(item), "", new ArrayList<>())).collect(Collectors.toList());
System.out.println(personList2);

3.4 生成实体类对象List,并指定实体类内的属性对象值

// 生成4个Person对象,每个Person对象中都包含houseList
List<Person> personList3 = IntStream.rangeClosed(1, 4)// 创建Person对象.mapToObj(item -> new Person(String.valueOf(item), "", new ArrayList<>()))/** ❗此处不能使用map,map会将Person中的HouseList获取出来,但是无法向HouseList中添加House对象* 使用peek操作流,流中的元素没有改变.相当于将每一个House对象放入HouseList中*/.peek(item -> IntStream.range(1, 4)// 生成4个House对象.mapToObj((i) -> new House(String.valueOf(i), ""))// 将House对象放入Person对象中.forEach(item.getHouseList()::add)).collect(Collectors.toList());

⏹使用flatMap展平所有的House

List<String> houseIdList1 = personList3// 使用并行流,无需在意顺序.parallelStream()// 获取出所有的HouseList,并将其展平为 List<House>.flatMap(item -> item.getHouseList().stream())// 将House流中的Id获取出来.map(House::getId).collect(Collectors.toList());
System.out.println(houseIdList1);
List<String> houseIdList2 = personList3.stream()// 获取所有的HouseList.map(Person::getHouseList)// 将所有的HouseList,并将其展平为 List<House>.flatMap(Collection::stream).map(House::getId).collect(Collectors.toList());
System.out.println(houseIdList2);

Java8 Stream生成流 generate iterate IntStream相关推荐

  1. java双层list扁平化,浅谈java8 stream flatMap流的扁平化操作

    概念: Steam 是Java8 提出的一个新概念,不是输入输出的 Stream 流,而是一种用函数式编程方式在集合类上进行复杂操作的工具.简而言之,是以内部迭代的方式处理集合数据的操作,内部迭代可以 ...

  2. java8 —— Stream( 流 )

    文章目录 一.Stream( 流 )是什么? 二.Stream 的操作三个步骤 三.创建Stream 四.Stream 的中间操作 4.1.筛选与切片 4.2. 映射:(重点) 4.3. 排序: 五. ...

  3. Java8 Stream接口流式方法:map操作、filter操作以及flatMap操作

    点击关注公众号,利用碎片时间学习 关于stream 流式操作,在rt.jar 包里面,ReferencePipeline管道方式操作数据 下面集成所有操作方法,利用这些流,处理大数据的方式,效率提升明 ...

  4. JAVA8 Stream方法使用详解reduce、IntStream(二)

    文章目录 一 归约 1.元素求和 2.最大值和最小值 二.数值流 1.映射数值流 2.转换对象流 3.数值范围 三.构建流 1.由值创建流 2.由数组创建流 3.由文件生成流 4.由函数生成流 此章节 ...

  5. Java8 Stream 流的创建、筛选、映射、排序、归约、分组、聚合、提取与组合、收集、接合、foreach遍历

    目录 一  了解Stream 1 Stream概述 那么什么是Stream? Stream可以由数组或集合创建 Stream有几个特性: Stream流的起始操作 2 Stream的创建----Str ...

  6. Java8——Stream流

    Java8--Stream流 Stream是数据渠道,用于操作集合.数组等生成的元素序列. Stream操作的三个步骤: 创建Stream 中间操作 终止操作 一.获取stream的四种方式 1.通过 ...

  7. Java8 Stream流式操作接口详解

    stream是用于集合使用的流式操作,可使用collection.stream获取流 default Stream<E> stream() {return StreamSupport.st ...

  8. 《Java8实战》读书笔记06:Parallel Stream 并行流

    <Java8实战>读书笔记06:Parallel Stream 并行流 第7章 并行数据处理与性能 7.1 并行流 7.1.1 将顺序流转换为并行流 7.1.2 测量流性能 7.1.3 正 ...

  9. java8 Stream的实现原理 (从零开始实现一个stream流)

    1.Stream 流的介绍 1.1 java8 stream介绍 java8新增了stream流的特性,能够让用户以函数式的方式.更为简单的操纵集合等数据结构,并实现了用户无感知的并行计算. 1.2  ...

最新文章

  1. 换个角度聊系统稳定性建设
  2. [Eclipse]GEF入门系列(六、添加菜单和工具条)
  3. 史上最全近百条Oracle DBA日常维护SQL脚本指令
  4. Windows Mobile Sensors API库的设计
  5. 2020计算机二级vb考试题库,2020年计算机二级VB题库计算机二级考试题库.docx
  6. 南方CASS9.0软件资源下载附安装教程
  7. android开发实现微博正文效果、顶部悬浮、ScrollView嵌套ListView
  8. Vue+Element表格动态列+表格分页
  9. MySQL Key的含义
  10. 分享几个阿里云盘资源搜索引擎
  11. 2019微信公开课 同行With Us 听课笔记及演讲全文
  12. 万豪国际集团于上海开设第五家福朋喜来登酒店
  13. 计算机网络 -- RS232接口 ----OSI物理层协议----RS232接口
  14. Qt 表格导出数据为 excel html csv
  15. opengl读取24位BMP文件为纹理并处理黑色背景为透明
  16. python定义一个复数类complex、内有两个成员变量_python(一):python语言基础
  17. 3dTile 数据文件格式说明
  18. win7 笔记本 做WIFI热点的设置
  19. 重置用户密码功能的实现
  20. 全球音质最好的MP3播放器——BeoPlayer V4.65

热门文章

  1. 【Python】面向对象版学生管理系统(文末有源代码)
  2. mysql中日期时间戳timestamp使用小结
  3. Uni-app “悦读”项目开发
  4. 简单实现接口自动化测试(基于python+unittest)
  5. 几十款免费好用的AI集合免费使用[⭐建议收藏⭐]
  6. ES6 Promise对象和then()的用法
  7. OpenApi合并实践
  8. Unity3D C#中 String.Format的格式限定符
  9. 4.2 同步计数器74x163 的实现
  10. 气动调节阀的术语小知识