1 知识框架

  先上一张图来说明一下Java8中”流”的引进、意义和优势。

2 传统Java集合的不足

2.1 传统Java集合

  集合是Java中用途十分广泛的一个集合,正是因为它对于数据的处理的优势,几乎任何一个Java应用程序都会设计对Java集合的制造和处理。
  然而,一个传统的Java集合仅仅是对Java集合内部的数据进行简单的添加、删除等操作,而且处理的数据类型有限。
   当涉及到复杂的业务逻辑处理时,需要借助大量的迭代器才能完成需求,操作繁琐,工作量大。

2.2 声明式操作

  我们熟悉的数据库SQL操作。例如:
SELECT name FROM users WHERE age < 30
  上面的SQL查询语句可以选出年龄小于30岁的用户的用户名。
在这里,我们只需要显式地声明我们的需求”选出年龄小于30岁的用户的用户名”就可以了,而不需要考虑如何实现。
  那么,Java集合如何实现这种显式的声明操作呢?

3 流是什么

3.1 实例讲解

  下面以一个实例展开讲解,来更好地认识什么是”流”。
  现在这里有若干鹅卵石,颜色、质量不等。

3.1.1 需求

1.挑选出质量小于500g的鹅卵石,并2.按照质量从大到小的顺序将它们排成一条线。

3.1.2 Java7(集合)实现

1.使用迭代器筛选元素
List<Stone> stoneList = new ArrayList<Stone>(); for (Stone s : stoneLine) { if
(s.getWeight() <500) { stoneList.add(s); } }
2.使用匿名类对鹅卵石进行质量排序(从大到小)
Collections.sort(stoneList, new Comparator<Stone>() { public int compare(Stone
s1, Stone s2) {return Integer.compare(s1.getWeight(), s2.getWeight()); } });
3.将派好序的鹅卵石排成一条线(放到一起)
List<String> lastStoneList = new ArrayList<Stone>(); for (Stone s : stoneList)
{ lastStoneList.add(s.getName()); } }
3.1.3 Java8(Stream)实现
List<String> lastStoneList = stoneLine.stream() .filter(s -> s.getWeight() <
500)//挑选出质量小于500g的鹅卵石 .sorted(comparing(Stone::getWeight))//按照质量进行排序 .map(Stone
::getName)//提取满足要求的鹅卵石的名字 .collect(toList());//将名字保存到List中
3.2 什么是流

  流,是一系列数据项,它不是一种数据结构。
  流可以进行相关的算法和计算,只是它并没有显式地表现,而是在内部进行隐式地操作。

4 流的优势

  流,解决了两个问题,1.直接实现你”想要什么”,2.可以进行并行处理。
  流,的本质,集合Lambda表达式,对传统Java集合的功能强化。
  Java 8 中的 Stream
是对集合(Collection)对象功能的增强,它专注于对集合对象进行各种非常便利、高效的聚合操作(aggregate
operation),或者大批量数据操作 (bulk data operation)。Stream API 借助于同样新出现的 Lambda
表达式,极大的提高编程效率和程序可读性。同时它提供串行和并行两种模式进行汇聚操作,并发模式能够充分利用多核处理器的优势,使用 fork/join
并行方式来拆分任务和加速处理过程。通常编写并行代码很难而且容易出错, 但使用 Stream API
无需编写一行多线程的代码,就可以很方便地写出高性能的并发程序。所以说,Java 8 中首次出现的 java.util.stream
是一个函数式语言+多核时代综合影响的产物。

技术
©2019-2020 Toolsou All rights reserved,
python中switch_to_alert的用法vue-countTo 操作大全央视:Tiktok打官司表明了维权的态度和决心雷军:两年前和卢伟冰喝酒到凌晨三点 钦佩其工作热情和能力习题11-5 指定位置输出字符串(精华)2020年6月26日 C#类库 文件读写操作帮助类Python实现switch方法关于多租户系统的思考git拉取远程分支并切换到该分支el-select同时获取label和value值