Java SE 8 流库

1. 流的作用

通过使用流,说明想要完成什么任务,而不是说明如何去实现它,将操作的调度留给具体实现去解决;

实例:假如我们想要计算某个属性的平均值,那么我们就可以指定数据源和属性,然后,流库就可以对计算进行优化;

1.1. 从迭代到流的操作

1.1.1. java.nio.file深度剖析

从java.nio.file提供的功能不难看出已经可以替换java.io.file所提供的功能;

1.1.1.1. java.nio.file的主要功能

1:对文件系统本身的操作,例如文件的复制,移除,删除,创建功能,创建软连接。

2:对文件系统的属性的进行操作,例如查看或修改 文件属性、操作权限、所属用户或用户组、最后修改时间,查看文件是否隐藏、文件的长度。

3:对文件系统进行遍历。

4:使用nio的方式查看和改变文件内容。

5:对文件或文件夹的创建,删除,修改事件进行监控。

1.1.1.2. java.nio.file提供常用方法

1:复制文件

copy(Path source,Path target,CopyOption... options) throws IOException

2:创建目录

createDirectories(Path dir,FileAttribute<?>... attrs) throws IOException

3:创建文件,path代表文件路径

createFile(Path path,FileAttribute<?>... attrs) throws IOException

4:创建连接,link代表目标连接,existing代表一个存在的文件

createLink(Path link,Path existing)throws IOException

5:删除文件

delete(Path path); deleteIfExists(Path path)

6:获取文件的BufferReader,BufferWriter

newBufferedReader(Path path, Charset cs), newBufferedWriter(Path path, Charset cs, OpenOption... options)

7:获取文件的InputStream,OutputStream

newInputStream(Path path, OpenOption... options),newOutputStream(Path path, OpenOption... options)

8:以字节和字符串形式读取文件

readAllBytes(Path path),readAllLines(Path path, Charset cs)

1.1.2. 实例

需求:对文档中的长单词进行计数

1.1.3. 传统方法

 1 import java.nio.charset.StandardCharsets;
 2 import java.nio.file.Files;
 3 import java.nio.file.Paths;
 4 import java.util.Arrays;
 5 import java.util.List;
 6
 7 /**
 8  * Created by Lenovo on 2017/12/14.
 9  * 对文件中的长单词进行计数
10  */
11 public class Demo01 {
12
13     private static final String filePath = "G:\\Idea\\src\\com\\itheima05\\Test_JavaSE\\Test_20171214\\word.txt";
14
15     public static void main(String[] args) throws Exception {
16
17         //使用集合的方法实现
18         String contens = new String(Files.readAllBytes(Paths.get(filePath)), StandardCharsets.UTF_8);
19         String[] ws = contens.split("\\PL+");
20         //将数组转化为List集合
21         List<String> words = Arrays.asList(ws);
22         int count = 0;
23         for(String word:words){
24             if(word.length()>6){
25                 count ++;
26             }
27         }
28         System.out.println(count);
29     }
30 }

1.1.4. 使用流处理

java.util.Collection<E>:

default Stream<E> stream()   -----  产生当前集合中所有元素的顺序流

default Stream<E> parallelStream()   -----  产生当前集合中所有元素的并行流

 1 import java.nio.charset.StandardCharsets;
 2 import java.nio.file.Files;
 3 import java.nio.file.Paths;
 4 import java.util.Arrays;
 5 import java.util.List;
 6
 7 /**
 8  * Created by Lenovo on 2017/12/14.
 9  * 使用流对文档中的长单词进行计数
10  *
11  */
12 public class Demo02 {
13
14     private static final String filePath = "G:\\Idea\\src\\com\\itheima05\\Test_JavaSE\\Test_20171214\\word.txt";
15
16     public static void main(String[] args) throws Exception {
17
18         String contents = new String(Files.readAllBytes(Paths.get(filePath)), StandardCharsets.UTF_8);
19
20         String[] ws = contents.split("\\PL+");
21         //将数组转化为集合
22         List<String> words = Arrays.asList(ws);
23         //使用流
24         //Stream<T> filter(Predicate<? super T> predicate) 产生一个流,其中包含当前流中满足P的所有元素
25         //long count()   产生当前流中元素的数量,这个是一个终止操作
26         long count = words.stream()
27                 .filter(w -> w.length() > 6)
28                 .count();
29         System.out.println("顺序流输出:"+count);
30
31         long count02 = words.parallelStream()
32                 .filter(w -> w.length()>6)
33                 .count();
34         System.out.println("并行流输出:"+count02);
35
36     }
37 }

流的主要思想是:做什么而非怎么做;

以上实例:需要统计文档中的长度为6的单词

1.1.5. 流和集合的区别

1:流并不存储其元素;

2:流的操作不会修改其数据源

3:流的操作是尽可能惰性执行的

1.1.6. 流的操作流程

1:创建一个流

2:指定将初始流转化为其他流的中间操作,可能包含多个步骤(filter,产生新的流);

3:应用终止操作,从而产生结果

时间: 2024-10-29 15:54:26

Java SE 8 流库的相关文章

Java 8 流库学习笔记(一)

[core Java学习笔记]Java SE8 流库 Stream Library 从迭代到流 如果要计算一个文本中有多少长单词(字母>12). 迭代式: words = getlist();//虚构方法,获得一个List<String> long count = 0; for(String w:words) { if(w.length()>12) count++; } 流式: words = getlist();//虚构方法,获得一个List<String> long

java书籍推荐:《Java SE 6 技術手册》

Java SE 6 技術手册 或  Java SE 6 技術手册 Java SE 6 技術手册 為什麼選擇用 Markdown?仅仅是單純把文件又一次排版太無聊了,不如趁這個機會學些新東西.所以我就藉這個機會來學著用 Markdown,並看看它有什麼好處與壞處 ... 假设你须要 PDF 與 epub 格式.而又有點懶自己轉換,那麼能够考慮在 Google Play 或 Pubu 上向便當價致敬,假设你须要 mobi 格式,能够使用 calibre 把 epub 轉為 mobi ... :) 我

Java SE 6 新特性: HTTP 增强--转

概述 Java 语言从诞生的那天起,就非常注重网络编程方面的应用.随着互联网应用的飞速发展,Java 的基础类库也不断地对网络相关的 API 进行加强和扩展.在 Java SE 6 当中,围绕着 HTTP 协议出现了很多实用的新特性:NTLM 认证提供了一种 Window 平台下较为安全的认证机制:JDK 当中提供了一个轻量级的 HTTP 服务器:提供了较为完善的 HTTP Cookie 管理功能:更为实用的 NetworkInterface:DNS 域名的国际化支持等等. NTLM 认证 不可

mybatis oracle java.sql.SQLException: 流已被关闭问题

/** * 按照页码取值(从current_page页开始,每页page_size条) * @param key * @param params * @param current_page * @param page_size * @return */ public <T> Pagination getPaginationByPage(String key, Object params,int current_page,int page_size) { int count = (Integer

Java SE (1)之 JFrame 组件 FlowLayout 布局

package com.sunzhiyan; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Demo_1 extends JFrame{ /** * @param args */ JButton button1,button2,button3; public static void main(String[] args) { // TODO Auto-generated method

Java SE知识点划分

Java SE知识点划分 1.程序设计基础:所有编程语言的基础(变量.数组.选择.循环等基本结构) 2.面向对象初识:理解类和对象,java中一切以类的设计为主 3.面向对象深入:三大特性(封装.继承.多态)其实接口相当的重要我更愿意把接口当作java的一大特性 4.常用类库:最典型的就是String类(学会如何使用这些已经封装好了的类,可以提高开发和工作效率) 5.异常处理.泛型:比较简单,开发中使用的用的也挺多的 6.多线程和网络编程:普通开发中用的并不是很多,但是如果涉及到即时通讯之类的就

几种Java的JSON解析库速度对比

java中哪个JSON库的解析速度是最快的? JSON已经成为当前服务器与WEB应用之间数据传输的公认标准,不过正如许多我们所习以为常的事情一样,你会觉得这是理所当然的便不再深入思考 了.我们很少会去想用到的这些JSON库到底有什么不同,但事实上它们的确是不太一样的.因此,我们运行了一个基准测试来对常用的几个JSON库进行了测 试,看看在解析不同大小的文件时哪个库的速度是最快的.下面我会把结果分享给大家. JSON通常用于传输及解析大文件.这对运行在Hadoop或者是Spark集群上的数据处理程

Java SE初步总结

前几天看完了马士兵老师的J2SE视频,算是开始Java的学习旅程了.现在每接触一个新的东西,都习惯去百度百科查一下它到底是个神马东西,然后再再深入一步去学习.对于J2SE,百度百科上是这么解释的: Java2平台包括:标准版(J2SE).企业版(J2EE)和微缩版(J2ME)三个版本.J2SE就是Java2的标准版,主要用于桌面应用软件的编程:J2ME主要应用于嵌入式系统开发,如手机和PDA的编程:J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统.这下明白

Java SE和Java EE应用的性能调优

凡事预则立,不预则废,和许多事情一样,Java性能调优的成功,离不开行动计划.方法或策略以及特定的领域背景知识.为了在Java性能调优工作中有所成就,你得超越"花似雾中看"的状态,进入"悠然见南山"或者已然是"一览众山小"的境界. 这三个境界的说法可能让你有些糊涂吧,下面进一步解释. 花似雾中看(I don't know what I don't know).有时候下达的任务会涉及你所不熟悉的问题域.理解陌生问题域首先面临的困难就是如何竭尽所能地