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,
阿亮的算法之路——14. 最长公共前缀【操作系统】重点知识点总结一段在STM32上实现密码设置功能的小程序醒醒吧,你所谓的“技术驱动”,可能只是一团废纸SpaceX星际飞船挺过飓风来袭,将做静态点火测试一元线性回归和梯度下降的python代码实现PyTorch中nn.Linear浅析【多线程系列】future模式阿亮的算法之路——2. 两数相加python编写一个会算账的脚本