1. public class Test06 {
  2. /*
  3. * StreamAPI:
  4. * StreamAPI是用来处理数据,处理集合等容器中的数据,处理操作有:查询、筛选、删除、过滤、统计、映射等。
  5. * 希望能够用类似于SQL语法的形式对Java内存中的数据进行处理。
  6. *
  7. * SQL是对数据库中的数据进行处理。
  8. *
  9. *
  10. * Stream本身不负责存储数据,存储数据是用集合,数组等数据结构。
  11. * Stream只负责对数据进行处理、加工。
  12. *
  13. * Stream的操作分为三步:
  14. * 1、创建Stream:告知Stream数据的来源是哪里?
  15. * 2、加工处理:这个过程可以很多步 0~n
  16. * 3、终结操作:收集结果
  17. * 一旦终结就不能再加工了,如果要加工需要重新创建Stream。
  18. *
  19. * Stream的特点:
  20. * (1)Stream本身不负责存储数据,存储数据是用集合,数组等数据结构。
  21. * (2)Stream是不可变,一旦修改,就会产生新的Stream对象。Stream不会修改数据源的数据。
  22. * (3)Stream的操作是一个延迟操作。所有的操作都必须延迟到终结操作时,一起处理。
  23. *
  24. */
  25. public static void main(String[] args) {
  26. ArrayList<Employee> list = new ArrayList<>();
  27. list.add(new Employee(1, "张三"));
  28. list.add(new Employee(1, "张三"));
  29.  
  30. Stream<Employee> stream = list.stream();
  31. stream = stream.distinct();//处理,中间操作
  32. long count = stream.count();//统计个数 终结操作
  33. System.out.println(count);
  34. System.out.println("over");
  35. System.out.println("--------------------");
  36. //重新遍历list
  37. for (Employee employee : list) {
  38. System.out.println(employee);
  39. }
  40.  
  41. }
  42.  
  43. }
  44.  
  45. class Employee {
  46. private int id;
  47. private String name;
  48.  
  49. public Employee(int id, String name) {
  50. super();
  51. this.id = id;
  52. this.name = name;
  53. }
  54.  
  55. public Employee() {
  56. super();
  57. }
  58.  
  59. public int getId() {
  60. return id;
  61. }
  62.  
  63. public void setId(int id) {
  64. this.id = id;
  65. }
  66.  
  67. public String getName() {
  68. return name;
  69. }
  70.  
  71. public void setName(String name) {
  72. this.name = name;
  73. }
  74.  
  75. @Override
  76. public String toString() {
  77. return "Employee [id=" + id + ", name=" + name + "]";
  78. }
  79.  
  80. @Override
  81. public int hashCode() {
  82. final int prime = 31;
  83. int result = 1;
  84. result = prime * result + id;
  85. result = prime * result + ((name == null) ? 0 : name.hashCode());
  86. return result;
  87. }
  88.  
  89. @Override
  90. public boolean equals(Object obj) {
  91. System.out.println("比较....");
  92. if (this == obj)
  93. return true;
  94. if (obj == null)
  95. return false;
  96. if (getClass() != obj.getClass())
  97. return false;
  98. Employee other = (Employee) obj;
  99. if (id != other.id)
  100. return false;
  101. if (name == null) {
  102. if (other.name != null)
  103. return false;
  104. } else if (!name.equals(other.name))
  105. return false;
  106. return true;
  107. }
  108. }

结果:

  1. 比较....
  2. 1
  3. over
  4. --------------------
  5. Employee [id=1, name=张三]
  6. Employee [id=1, name=张三]

Stream(一)的更多相关文章

  1. SQL Server-聚焦查询计划Stream Aggregate VS Hash Match Aggregate(二十)

    前言 之前系列中在查询计划中一直出现Stream Aggregate,当时也只是做了基本了解,对于查询计划中出现的操作,我们都需要去详细研究下,只有这样才能对查询计划执行的每一步操作都了如指掌,所以才 ...

  2. Node.js:理解stream

    Stream在node.js中是一个抽象的接口,基于EventEmitter,也是一种Buffer的高级封装,用来处理流数据.流模块便是提供各种API让我们可以很简单的使用Stream. 流分为四种类 ...

  3. node中的Stream-Readable和Writeable解读

    在node中,只要涉及到文件IO的场景一般都会涉及到一个类-Stream.Stream是对IO设备的抽象表示,其在JAVA中也有涉及,主要体现在四个类-InputStream.Reader.Outpu ...

  4. nodejs中流(stream)的理解

    nodejs的fs模块并没有提供一个copy的方法,但我们可以很容易的实现一个,比如: var source = fs.readFileSync('/path/to/source', {encodin ...

  5. Node学习笔记(一):stream流操作

    NodeJs中谈及较多的可能就是Stream模块了,先写一个简单的ajax回调 $.post("index.php",{data:'aaa',order:'ccc'},functi ...

  6. Stream

    Stream的好处 1.Stream AP的引入弥补了JAVA函数式编程的缺陷.2.Stream相比集合类占用内存更小:集合类里的元素是存储在内存里的,Stream里的元素是在访问的时候才被计算出来. ...

  7. Stream流

    在Node中,存在各式各样不同的数据流,Stream(流)是一个由不同对象实现的抽象接口.例如请求HTTP服务器的request是一个 流,类似于stdout(标准输出):包括文件系统.HTTP 请求 ...

  8. [LeetCode] Data Stream as Disjoint Intervals 分离区间的数据流

    Given a data stream input of non-negative integers a1, a2, ..., an, ..., summarize the numbers seen ...

  9. [LeetCode] Moving Average from Data Stream 从数据流中移动平均值

    Given a stream of integers and a window size, calculate the moving average of all integers in the sl ...

  10. [LeetCode] Find Median from Data Stream 找出数据流的中位数

    Median is the middle value in an ordered integer list. If the size of the list is even, there is no ...

随机推荐

  1. vscode链接git拉取项目

    vscode终端中就可操作 初始化 git  init 链接 git git remote add origin http://**************.git 拉取项目 git clone ht ...

  2. 学习Maven有感

    1.maven的由来 maven是一款服务于java平台的自动化构建工具 构建定义:把动态的Web工程经过编译得到的编译结果部署到服务器上的整个过程. 编译:java源文件[.java]->编译 ...

  3. Java单播、组播(多播)、广播的简单实现

    简介 单播有TCP和UDP两种实现,组播(多播)和广播只有UDP一种实现.单播和广播基本一样,只是广播的数据包IP为广播IP.   单播 DatagramSocket和DatagramPacket 服 ...

  4. Python 3 入门,看这篇就够了(超全整理)

    史上最全Python资料汇总(长期更新).隔壁小孩都馋哭了 --- 点击领取 今天和大家分享的内容是Python入门干货,文章很长. 简介 Python 是一种高层次的结合了解释性.编译性.互动性和面 ...

  5. Typore的简单用法

    1 无序列表使用方法 +号和空格一起按就可以写出这个点 2 有序列表使用方法 .先写1.然后打个空格就再回车 3 使用#和空格表示一级标题 一级标题 4 使用##和空格表示二级标题 5 二级标题 6 ...

  6. P5858 「SWTR-03」Golden Sword

    题面: Link 题面有点长,不想粘了,QAQ. 题解: 一句话题意,你有 \(n\) 件物品需要依次放进去,每个物品放进去之后会得到一定的权值,为当前锅炉里面的物品的数量乘以 \(a_i\) 每次在 ...

  7. mac常用指令

    mkdir demo //创建一个文件夹 touch index.html // 创建一个html文件 rm rouch index.html //删除找个index.html文件 rmdir dem ...

  8. JSOI 2008 【魔兽地图】

    其实这题是我从noip前就开始做的...那个时候打的Pascal,一直TLE,转了C++之后我又写了一遍,A了... 辛酸史:                      题目描述: DotR (Def ...

  9. vue3.x版本新建项目相关知识和注意事项

    前言你前提应该懂下面基础知识:下载node.js 下好后自带npm 命令 终端查看命令 npm -v 即可看到安装版本安装淘宝镜像:npm install -g cnpm --registry=htt ...

  10. 在Windows7中打开照片,提示“Windows 照片查看器无法显示此图片,因为计算机上的可用内存可能不足。....”

    在Windows7中打开照片,提示"Windows 照片查看器无法显示此图片,因为计算机上的可用内存可能不足.请关闭一些目前没有使用的程序或者释放部分硬盘空间(如果硬盘几乎已满),然后重试. ...