Java 8常用的流操作

以下都是我从《java 8函数式编程》看到的,
collect(toList())
collect(toList())方法是由stream里面的值生成的一个列表,是一个及早求值的操作。
List<Integer> list = Stream.of(1,2,3,4,5,).collect(Collectors.toList());

assertEquals(Arrays.asList(1,2,3,,4,5),List);
上面 程序讲述的是从Stream中生成一个列表。很多Stream操作都是惰性求值,因此调用Stream上一个系列的方法之后,还需要最后调用一个类似collect的及早求值方法。

map
假设函数可以将一种类型的值转换成另外一种类型,map操作就可以使用该函数,将流中的值转换成一个新的流,如map将字符串转换为大写形式
List<String> collect = Stream.of("a","b","hello").map(String->string.toUpperCase()).collect(toList());

assertEqual(asList("A","B","HELLO"),collect);
传给map的Lambda表达式只接受一个String类型的参数,返回一个新的string。参数和返回值不必属于同一种类型,但是lambda表达式必须是Function接口的一个实例。

filter
遍历数据并检查其中的元素时,可尝试使用stream提供新的方法
以往我们都是循环遍历列表,使用条件语句做判断。这可以被称为filter模式。
List<String> beginningWithNumbers = Stream.of("a","1abc","abc1").filter(value->isDigit(value.charAt(0)))
.collect(toList());
filter也是接受一个函数作为参数,该函数用Lambda表达式表示。

flatMap
flatMap方法可以用Stream替换值,然后将多个Stream连接成一个Stream。Map操作是用一个新的值代替Stream中的值。但是,用户希望让map操作有点不一样,生成一个新的Stream对象来替换。用户不希望结果是一连串的流,此时flatMap最能派上用场。
List<Integer> together = Stream.of(asList(1,2),asList(3,4)).flatMap(number ->numbers.stream()).collect(toList());
assertEquals(asList(1,2,3,4),together);
调用stream方法,将每个列表转换成stream对象,其余部分由flatMap方法处理。flatMap方法的相关函数接口和map的方法一样,都是Functio接口,只是方法的返回值限定为Stream类型。

max和min
Stream上常用的操作之一就是求最大值和最小值。Stream API中的max和min操作足以解决这一问题。
Stream查找最短曲目
List<Track> tracks = asList(new Track("Bakai",524),
new Track("Violets for Your Furs",378),
new Track("Time Was",451));

Track shortestTrack = track.stream().min((Comparator.comparing(track ->track.getLength())).get();

assertEquals(tracks.get(1),shortestTrack);
查找Stream中的最大或最小元素,首先考虑排序的指标。为了让Stream对象按照曲目长度进行排序,需要传给他一个comparator对象。java8 提供一个新的静态方法compaing,使用它可以方便地实现一个比较器。

原文地址:https://blog.51cto.com/13271983/2388162

时间: 2024-10-11 20:33:47

Java 8常用的流操作的相关文章

Java中常用IO流之文件流的基本使用姿势

所谓的 IO 即 Input(输入)/Output(输出) ,当软件与外部资源(例如:网络,数据库,磁盘文件)交互的时候,就会用到 IO 操作.而在IO操作中,最常用的一种方式就是流,也被称为IO流.IO操作比较复杂,涉及到的系统调用比较多,相对操作内存而言性能很低.然而值得兴奋的是,Java提供了很多实现类以满足不同的使用场景,这样的实现类有很多,我只挑选些在日常编码中经常用到的类进行说明,本节主要介绍和文件操作相关的流,下面一起来瞧瞧吧. File File是Java在整个文件IO体系中比较

java文件与文件流操作总结

一:数据流的相关概念 数据流 在Java中把不同的数据源与程序之间的数据传输都抽象表述为"流"(stream),以实现相对统一和简单的输入/输出操作方式.传输中的数据就像流水一样,也称为数据流. 2 .I/O数据流的分类方式 数据流分为输入流和输出流两类.输入流只能读取不能写.而输出流只能写不能读.(这里站在程序的角度来确定出入方向,即将数据从程序外部传送到程序中谓之"输入"数据,将程序中的数据传送到外部谓之"输出"数据. ) 3.缓冲流(Buf

java:Writer/Reader字符流操作

字符流的操作: 字节流的操作,是直接映射文件的:file->文件 字符流的操作是需要存在缓存区的:file->缓冲区->文件 (中文处理,一般用字符流) public static void main(String args[]) throws Exception { File file = new File("F:"+File.separator+"work"+File.separator+"work"+File.separa

Java基础--常用IO流使用实例

读取文本文件: 1 private static void ioDemo1() { 2 try { 3 FileReader fileReader = new FileReader("C:\\Users\\yan\\Desktop\\编码规范 (2).txt"); 4 int aa; 5 aa = fileReader.read(); 6 while (aa!=-1) {//转换为char类型,否则是一堆数字 7 System.out.print((char)aa); 8 aa = f

Java中常用的IO操作基本上可以分为四大部分

http://www.songtaste.com/user/11237131/infohttp://www.songtaste.com/user/11237161/infohttp://www.songtaste.com/user/11237129/infohttp://www.songtaste.com/user/11237216/infohttp://www.songtaste.com/user/11237231/infohttp://www.songtaste.com/user/11237

io流操作大全

JAVA 中的IO流 一.流的概念 流(stream)的概念源于UNIX中管道(pipe)的概念.在UNIX中,管道是一条不间断的字节流,用来实现程序或进程间的通信,或读写外围设备.外部文件等.       一个流,必有源端和目的端,它们可以是计算机内存的某些区域,也可以是磁盘文件,甚至可以是Internet上的某个URL.        流的方向是重要的,根据流的方向,流可分为两类:输入流和输出流.用户可以从输入流中读取信息,但不能写它.相反,对输出流,只能往输入流写,而不能读它.     

Java8函数式编程(二):类比Spark RDD算子的Stream流操作

1 Stream流 对集合进行迭代时,可调用其iterator方法,返回一个iterator对象,之后便可以通过该iterator对象遍历集合中的元素,这被称为外部迭代(for循环本身正是封装了其的语法糖),其示意图如下: 除此之外,还有内部迭代方法,这正是这里要说明的集合的stream()方法返回的Stream对象的一系列操作,比如,要统计一个数字列表的偶数元素个数,当使用Stream对象的操作时,如下: List<Integer> list = new ArrayList<Integ

还看不懂同事的代码?超强的 Stream 流操作姿势还不学习一下

Java 8 新特性系列文章索引. Jdk14都要出了,还不能使用 Optional优雅的处理空指针? Jdk14 都要出了,Jdk8 的时间处理姿势还不了解一下? 还看不懂同事的代码?Lambda 表达式.函数接口了解一下 前言 我们都知道 Lambda 和 Stream 是 Java 8 的两大亮点功能,在前面的文章里已经介绍过 Lambda 相关知识,这次介绍下 Java 8 的 Stream 流操作.它完全不同于 java.io 包的 Input/Output Stream ,也不是大数

Storm实时计算:流操作入门编程实践

转自:http://shiyanjun.cn/archives/977.html Storm实时计算:流操作入门编程实践 Storm是一个分布式是实时计算系统,它设计了一种对流和计算的抽象,概念比较简单,实际编程开发起来相对容易.下面,简单介绍编程实践过程中需要理解的Storm中的几个概念: Topology Storm中Topology的概念类似于Hadoop中的MapReduce Job,是一个用来编排.容纳一组计算逻辑组件(Spout.Bolt)的对象(Hadoop MapReduce中一