JAVA8之Stream

摘要:
流和集合是内存中的数据结构。必须计算集合中的每个元素,然后才能将其添加到集合中。

流与集合

集合是一个内存中的数据结构,集合中的每个元素都得先计算出来才能添加到集合中。

流与集合有以下不同:

1.无存储. stream不是一种数据结构,它只是某种数据源的一个视图

2.不可修改.对stream的任何修改都不会影响背后的数据源

3.可消费性.stream只能被消费一次.

JAVA8之Stream第1张

Collection:集合类接口.

Collector:收集器,也是接口,对应的工具类是Collectors.

collect:规约操作,参数为收集器.

流操作

【中间操作】对流进行处理后,会返回另一个流

操作类型返回类型操作参数函数描述符描述
filter中间stream<T>Predicate<T>T -> boolean
map中间stream<R>Function<T,R>T -> R
limit(n)中间stream<T>
sorted中间stream<T>Comparator<T>(T,T) -> R
distinct中间stream<T>
skip(n)中间stream<T>返回一个扔掉了前n个元素的流,和limit互补

【终端操作】会从流的流水线生成结果

操作类型目的
forEach终端消费流中的每个元素并对其应用Lambda
count终端返回流中元素的个数
collect终端把流归约成一个集合

流的扁平化

flatMap方法可以把一个流中的每个值都换成另一个流,然后把所有的流连接起来成为一个流

flatMap参数:Function<? super T,? extends Stream<? extends R>>

JAVA8之Stream第2张

构建流

1.由值创建流

Stream<String> stream = Stream.of("Java8","Lambda");

2.由数组创建流

JAVA8之Stream第3张

3.由文件生成流

packagestream;

importjava.io.IOException;
importjava.nio.file.Files;
importjava.nio.file.Paths;
importjava.util.Arrays;
importjava.util.Optional;
importjava.util.stream.Stream;

public classFilesLinesStreamTest {
    public static voidmain(String[] args) {
        String fileUrl = "F:\file\123.txt"; 
        //从path对应的文件中读取所有内容,并按行分割,返回一个 Stream<String>
        //try-with-resources语句可以自动调用资源的close方法
        try(Stream<String> lines =Files.lines(Paths.get(fileUrl))) {
            Optional<String> opt = lines.flatMap(line -> Arrays.stream(line.split(" "))).findFirst();
            System.out.println(opt.orElse("no data"));
        } catch(IOException e) {
            //TODO Auto-generated catch block
e.printStackTrace();
        }
    }
}

免责声明:文章转载自《JAVA8之Stream》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇SVN提交注意点iphone利用AudioQueue播放音频文件(mp3,aac,caf,wav等)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

C# winform在WebBrowser下获取完整的Cookies(包括含HTTPOnly属性的)

利用wininet获取网页Cookie 模拟post请求取数据,使用普通的Cookies无法获取完整的Cookies信息 只能获取了一部分 ,导致取回来的是重新登陆的页面。 后来经过不懈的精神,终于找到了方法实现获取HTTPOnly。 WinInet WinInet(“Windows Internet”)API帮助程序员使用三个常见的Internet协议,...

SpringBoot入门 (四) 数据库访问之JdbcTemplate

  本文记录在SpringBoot中使用JdbcTemplate访问数据库。 一 JDBC回顾   最早是在上学时接触的使用JDBC访问数据库,主要有以下几个步骤: 1 加载驱动 Class.forName(Driver) 2 获取数据库连接 conn = DriverManager.getConnection(url, user,password) 3...

Mybatis框架resultMap元素的自动映射级别

resultMap的自动映射级别:分为三种:NONE  PARTIAL  FULL 其中默认的属性是:PARTIAL:开启自动匹配,会自动匹配数据库中的字段名和实体类中的属性名,如果一致,就能匹配上,如果不一致,就不能进行匹配 mybatis-config.xml  UserMapper.xml  UserMapper.java 编写测试方法: 1...

VB创建类模块DLL文件

最近需要调用MSCOMM32.OCX控件,但是ABAP调用过程中发现无法同时发送多条记录,则需调整实现方式:   a.创建DLL文件封装MSCOMM控件相关属性及方法   b.系统注册DLL文件   c.ABAP调用DLL文件相关属性及方法 这一部分内容主要是将VB类模块的创建过程记录下: 1.打开VB,创建ActiveX DLL文件   2.修改工程名为...

和小猪一起搞微信公众号开发—二维码创建使用流程(需要授权)

使用该接口可以获得多个带不同场景值的二维码,用户扫描后,公众号可以接收到事件推送。 目前有2种类型的二维码,分别是临时二维码和永久二维码,前者有过期时间,最大为1800秒,但能够生成较多数量,后者无过期时间,数量较少(目前参数只支持1--1000)。两种二维码分别适用于帐号绑定、用户来源统计等场景。 用户扫描带场景值二维码时,可能推送以下两种事件: 如果...

Linux命令之basename 命令

用途 返回一个字符串参数的基本文件名称。 语法 basename String [ Suffix ] 描述 basename 命令读取 String 参数,删除以 /(斜杠) 结尾的前缀以及任何指定的 Suffix 参数,并将剩余的基本文件名称写至标准输出。basename 命令应用以下创建基本文件名称的规则: 如果 String 参数是 //(双斜杠)...