Java提升四:Stream流】的更多相关文章

不知不觉间,Java已经发展到13了,来不及感慨时间过得真的太快了,来不及学习日新月异的技术更新,目前大多数公司还是使用的JDK8版本,一方面是版本的稳定,另一方面是熟悉,所以很多公司都觉得不升级也挺好. 说到JDK8,真的是一个里程碑的版本,一出世就受到所有开发者的青睐,并主动花时间和精力去学习,也是我见过企业升级JDK最豪爽最不犹豫的一个版本,可见JDK8的受欢迎程度.当然所有的喜爱都是因为它的特性,整理了jdk8的十大主要特性: Lambda表达式 Stream函数式操作流元素集合 接口新…
java中的Stream流 说到Stream便容易想到I/O Stream,而实际上,谁规定"流"就一定是"IO流"呢?在Java 8中,得益于Lambda所带 来的函数式编程,引入了一个全新的Stream概念,用于解决已有集合类库既有的弊端. 一.引言 传统集合的多步遍历代码 几乎所有的集合(如 Collection 接口或 Map 接口等)都支持直接或间接的遍历操作.而当我们需要对集合中的元 素进行操作的时候,除了必需的添加.删除.获取外,典型的就是集合遍历.…
1.Stream流的定义 Stream是Java中的一个接口.它的作用类似于迭代器,但其功能比迭代器强大,主要用于对数组和集合的操作. Stream中的流式思想:每一步只操作,不存储. 2.Stream流的获取 可以获取Stream流的有数组和集合.对于数组而言,获取Stream流的方式如下: StreamMethodCount of(数组) 代码示例: //数组变为Stream流 int[] arr={1,2,3,4,5,6,7}; Stream<int[]> stream = Stream…
在Java 7之前,并行处理集合非常麻烦.首先你要明确的把包含数据的数据结构分成若干子部分,然后你要把每个子部分分配一个独立的线程.然后,你需要在恰当的时候对他们进行同步来避免竞争,等待所有线程完成.最后,把这些部分结果合并起来.Java 7中引入了一个叫做 分支/合并的框架,让这些操作更稳定,更不容易出错. 并行流 使用Stream接口可以方便的处理它的元素,可以通过对收集源调用parallelStream方法来把集合转换为并行流.并行流就是一个把内容分成多个数据块,并用不同的线程分别处理每个…
Stream流 Java 8 API添加了一种新的机制——Stream(流).Stream和IO流不是一回事. 流式思想:像生产流水线一样,一个操作接一个操作. 使用Stream流的步骤:数据源→转换成流→操作1→操作2→…… 数据源(source):可以是集合.数组等. Stream操作有两个基础特征: Pipelining(流水线):流操作会返回流对象(新的对象),以便后续继续进行流操作. 内部迭代:不需要像for循环或Iterator一样进行显式的迭代. 遍历及过滤集合中的元素 使用传统方…
什么是流? 流是Java API的新成员,它允许你以声明性方式处理数据集合(通过查询语言来表达,而不是临时编写一个实现).就现在来说你可以先把它当做是一个遍历数据集的高级迭代器.此外,流还支持并行,你无需写任何多线程的代码! 定义一个实物类 public class Dish { //菜名 private String Name; //是否素食 private boolean vegetarian; //热量 private Integer Calories; //分类 private Type…
//双重for循环for (int i = 0; i < fusRecomConfigDOList.size(); i++) { for (int j = 0; j < fusRecomConfigDOS.size(); j++) { if(fusRecomConfigDOList.get(i).getSceneCode().equals(fusRecomConfigDOS.get(j).getSceneCode())){ fusRecomConfigDOList.get(i).setExis…
在前面已经使用过collect终端操作了,主要是用来把Stream中的所有元素结合成一个List,在本章中,你会发现collect是一个归约操作,就像reduce一样可以接受各种做法作为参数,将流中的元素累计成一个汇总结果. 看这个例子:按照菜类进行分组 List<Dish> menu = Arrays.asList( new Dish("猪肉炖粉条", false, 800, Type.MEAT), new Dish("小炒牛肉", false, 70…
在本节中将介绍Stream API支持的许多操作,这些操作可以完成更复杂的数据查询,如筛选.切片.映射.查找.匹配和归约.还有一些特殊的流如:数值流.来自文件和数组等多种来源的流. 筛选和切片 1.用谓词筛选 Streams接口支持filter方法,该操作会接受一个谓词作为参数,并返回一个包含所有符合谓词的元素的流.例如筛选出所有素菜: List<Dish> vegetarianMenu = menu.stream().filter(Dish::isVegetarian).collect(to…
集合对象.stream() 获取流对象,对元素批处理(不改变原集合) 集合元素循环除了用for循环取出,还有更优雅的方式.forEach 示例List集合获取Stream对象进行元素批处理 import java.util.ArrayList; import java.util.List; /** * @ClassName ArrayListStreamExample * @projectName: object1 * @author: Zhangmingda * @description: X…
在上一节,介绍了字节流的基本使用,本节介绍一下字符流的使用 Reader: public abstract class Reader implements Readable, Closeable { protected Object lock; private static final int maxSkipBufferSize = 8192; private char[] skipBuffer = null; protected Reader() { this.lock = this; } p…
Java 8 新特性系列文章索引. Jdk14都要出了,还不能使用 Optional优雅的处理空指针? Jdk14 都要出了,Jdk8 的时间处理姿势还不了解一下? 还看不懂同事的代码?Lambda 表达式.函数接口了解一下 前言 我们都知道 Lambda 和 Stream 是 Java 8 的两大亮点功能,在前面的文章里已经介绍过 Lambda 相关知识,这次介绍下 Java 8 的 Stream 流操作.它完全不同于 java.io 包的 Input/Output Stream ,也不是大数…
Stream流的初步学习 初次学习Stream流的学习笔记,学习之前先了解一下函数式接口 概述 API是一个程序向使用者提供的一些方法,通过这些方法就能实现某些功能.所以对于流API来 说,重点是怎么理解"流"这个概念,所谓的流:就是数据的渠道,所以,流代表的是一个对象的 序列.它和Java I/O类里使用的"流"不同.虽然在概念上与java.util.stream中定义的流是类 似的,但它们是不同的.流API中的流是描述某个流类型的对象. 流API中的流操作的数据…
背景 java 8已经发行好几年了,前段时间java 12也已经问世,但平时的工作中,很多项目的环境还停留在java1.7中.而且java8的很多新特性都是革命性的,比如各种集合的优化.lambda表达式等,所以我们还是要去了解java8的魅力. 今天我们来学习java8的Stream,并不需要理论基础,直接可以上手去用. 我接触stream的原因,是我要搞一个用户收入消费的数据分析.起初的统计筛选分组都是打算用sql语言直接从mysql里得到结果来展现的.但在操作中我们发现这样频繁地访问数据库…
Stream流 在Java 8中,得益于Lambda所带来的函数式编程,引入了一个全新的Stream概念,用于解决已有集合类库既有的弊端 一.传统遍历 1.传统集合的多步遍历代码 几乎所有的集合(如 Collection 接口或 Map 接口等)都支持直接或间接的遍历操作.而当我们需要对集合中的元素进行操作的时候,除了必需的添加.删除.获取外,最典型的就是集合遍历. 例如: import java.util.ArrayList; import java.util.List; public cla…
1.lambda 表达式 lambda 的延迟执行 可以对程序进行优化,尤其是使用 if {} else {} 条件判断,先判断条件是否成立,再传入计算好的参数. functionName( paramters, () -> { } ); 2.stream 流式思想 stream 是jdk8之后出现的语法 拼接流式模型:建立一个生产线,按照生产线来生产商品 经过了过滤.映射.跳过.计数等多步操作,集合元素的处理方案 filter.map.skip,得益于lambda的延迟执行特性. (1) 获取…
全面吃透JAVA Stream流操作,让代码更加的优雅 在JAVA中,涉及到对数组.Collection等集合类中的元素进行操作的时候,通常会通过循环的方式进行逐个处理,或者使用Stream的方式进行处理. 例如,现在有这么一个需求: 从给定句子中返回单词长度大于5的单词列表,按长度倒序输出,最多返回3个 在JAVA7及之前的代码中,我们会可以照如下的方式进行实现: /** * [常规方式] * 从给定句子中返回单词长度大于5的单词列表,按长度倒序输出,最多返回3个 * * @param sen…
文件读取 FileInputStream FileReader 文件写入 FileOutputStream FileWriter 随机文件读写 RandomAccessFile 一.文件读取 FileInputStream和FileReader是文件字节输入流和文件字符输入流,都是提供文件读取功能,只是读取形式不同,一个以字节为最小单位读取,一个以字符为最小单位读取,并且两者都必须从文件头开始,按顺序读取,读取结束后需要调用close()方法释放流对象. 两个文件输入流的有参构造方法一致,以Fi…
java 字节流与字符流的区别(转载)   字节流与和字符流的使用非常相似,两者除了操作代码上的不同之外,是否还有其他的不同呢?   实际上字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用了缓冲区,通过缓冲区再操作文件,如下图所示.   下面以两个写文件的操作为主进行比较,但是在操作时字节流和字符流的操作完成之后都不关闭输出流.   范例:使用字节流不关闭执行 import java.io.File; import java.io.FileOutputStre…
题目需求: 1:第一个队伍只要名字为3个字成员的姓名,存储到新集合 2:第一个队伍筛选之后只要前3人:存储到一个新集合 3:第2个队伍只要姓张的成员姓名:存储到一个新集合 4:第2个队伍不要前2人,存储到一个新集合 5:将2个队伍合并到一个队伍,存储到一个新集合 6:根据姓名创建Person对象,存储到一个新集合 //使用普通方法进行筛选 前面加了一个时间类 import java.util.ArrayList;public class Demo08List { public static vo…
上一篇<Java中的IO流(三)>把IO流中的文件及目录操作的对象File类记录了一下,本篇把本不属性IO流但又和IO流有关系的一个对象作一下记录,此对象本属于集合框架里的一个子集,即Properties类 Properties 类表示了一个持久的属性集.Properties 可保存在流中或从流中加载.属性列表中每个键及其对应值都是一个字符串.之所以把这个类放在IO流中来记录,原因就是因为此类可保存在流中或从流中加载. 先记录一下Properties集合的特点: 1,集合中的键和值都是字符串类…
1.Java中FileRead方法的运用代码及详解 package example2;import java.io.FileReader;import java.io.IOException;class FileRead{    public static void main(String[] args) throws IOException{        //创建一个FileWriter对象    //FileWriter fw=new FileWriter("File01.txt"…
前言 最近在实习,在公司看到前辈的一些代码,发现有很多值得我学习的地方,其中有一部分就是对集合使用Stream流式操作,觉得很优美且方便.所以学习一下Stream流,在这里记录一下. Stream是什么 Stream是Java 8中出现的新特性,极大增强了集合对象的功能,专注于对集合对象进行方便.高效的聚合操作.另外可以配合Lambda表达式,让代码更加容易理解.另外Stream提供串行和并行两种操作方式,并行操作可以很方便的写出高性能的并发程序. Stream像是一个高级版本的Iterator…
一.stream的应用场景 for遍历的冗余场景:  stream的写法: 二.获取Stream流的常用方式 三.Stream的map映射方法 更简单的写法: 四.Stream的filter过滤方法 五.Stream的forEach遍历方法[无需返回值] 六.并发的Stream流 概念:  单线程和并发:  …
Java 8 新特性之 Stream 流基础体验 package com.company; import java.util.ArrayList; import java.util.List; import java.util.Optional; import java.util.function.Predicate; import java.util.stream.Stream; public class Main { public static void main(String[] args…
如果说前面几章是函数式编程的方法论,那么 Stream 流就应该是 JAVA8 为我们提供的最佳实践. Stream 流的定义 Stream 是支持串行和并行操作的一系列元素.流操作会被组合到流管道中(Pipeline)中,一个流管道必须包含一个源(Source),这个源可以是一个数组(Array),集合(Collection)或者 I/O Channel,会有一个或者多个中间操作,中间操作的意思就是流与流的操作,流还会包含一个中止操作,这个中止操作会生成一个结果. Stream 流的作用 以函…
半年前开始试着使用Java的新特性,给我印象最深的就是Stream流和Optional.其中Stream提高了看法效率,让代码看起来十分清爽. 为什么要使用流? 摘要中已经说明了,为了提高开发效率.流可以帮助我们高效操作集合,流帮助我们通过流水线的方式对集合进行删减.合并.排序.修改,并最终返回我们想要的元素数据或统计数据.流水线的意思是说,一批元素不需要等待全部元素都完成某步操作,才进行下步操作,而是可以尽早进行下步操作,就好像流水线工厂一样,这为流高效运作提供了基础.流还有一个内部迭代的概念…
两个星期以前,就有读者强烈要求我写一篇 Java Stream 流的文章,我说市面上不是已经有很多了吗,结果你猜他怎么说:"就想看你写的啊!"你看你看,多么苍白的喜欢啊.那就"勉为其难"写一篇吧,嘻嘻. 单从"Stream"这个单词上来看,它似乎和 java.io 包下的 InputStream 和 OutputStream 有些关系.实际上呢,没毛关系.Java 8 新增的 Stream 是为了解放程序员操作集合(Collection)时的生产…
1. 前言 Java Stream Api 提供了很多有用的 Api 让我们很方便将集合或者多个同类型的元素转换为流进行操作.今天我们来看看如何合并 Stream 流. 2. Stream 流的合并 Stream 流合并的前提是元素的类型能够一致. 2.1 concat 最简单合并流的方法是通过 Stream.concat() 静态方法: Stream<Integer> stream = Stream.of(1, 2, 3); Stream<Integer> another = S…
什么是 Steam Java 8 中新增了 Stream(流)来简化集合类的使用,Stream 本质上是个接口,接口中定义了很多对 Stream 对象的操作. 我们知道,Java 中 List 和 Set 集合都是基于 Collection 接口的扩展,在 Java 8 中新增了 stream( ) 方法来获取 Stream 对象,方法如下: default Stream<E> stream() { return StreamSupport.stream(spliterator(), fals…