Java 8 Friday Goodies:新的新I / O API

在Data Geekery ,我们喜欢Java。 而且,由于我们真的很喜欢jOOQ的流畅的API和查询DSL ,我们对Java 8将为我们的生态系统带来什么感到非常兴奋。 我们已经写了一些关于Java 8好东西的博客 ,现在我们觉得是时候开始一个新的博客系列了……

Java 8星期五

每个星期五,我们都会向您展示一些不错的教程风格的Java 8新功能,这些功能利用了lambda表达式,扩展方法和其他好东西。 您可以在GitHub上找到源代码 。

Java 8 Goodie:新的新I / O API

在本系列的上一篇博客文章中 ,我们主要通过帮助您将java.io.FileFilter实例表示为lambda表达式,展示了Java 8的lambda表达式如何在现有(但已过时)的JDK 1.2 I / O API上进行改进。

许多读者正确地指出,许多java.io API已被Java 7的java.nio API取代,其中“ N”代表“ New” (我知道。New.Old.Old-2.Old- 2-FIXME。Old-2-TODO ...)。 但是Java 8的情况甚至更好。我们将其称为New New I / O API(NNIO),尽管jOOQ社区成员建议将其称为“ Enterprise IO”:

@ lukaseder @ brunoborges @ ponzao为“企业IO” +1(在这种情况下,当然不能正常工作)— Franz van Betteraey(@FrVaBe) 2014年1月15日

回到更具建设性的博客。 让我们走一小段路程(打算用双关语,请参见Files.walk() ),了解改进的Java 8 NIO功能。 首先让我们看看java.nio.Files中的新方法。 实际上,我们终于可以列出Path的内容了,这真是太棒了! 在Java 8中,我们将使用新引入的Files.list() ,它返回文件的惰性流:

Files.list(new File(".").toPath()).forEach(System.out::println);

我得到的输出是这样的:

.\.git
.\.gitignore
.\.idea
.\java8-goodies.iml
.\LICENSE.txt
.\pom.xml
.\README.txt
.\src
.\target

请记住, forEach()是“终端方法” ,即使用流的方法。 您不得在此类Stream上调用任何其他方法。

我们还可以跳过所有隐藏文件,仅列出前三个“常规”文件,如下所示:

Files.list(new File(".").toPath()).filter(p -> !p.getFileName().toString().startsWith(".")).limit(3).forEach(System.out::println);

我得到的新输出是这个:

.\java8-goodies.iml
.\LICENSE.txt
.\pom.xml

现在,这已经非常棒了。 会好起来吗? 是的,它可以。 您还可以使用新的Files.walk()方法进入目录,从而“遍历”整个文件层次结构。 就是这样:

Files.walk(new File(".").toPath()).filter(p -> !p.getFileName().toString().startsWith(".")).forEach(System.out::println);

不幸的是,上面的方法将创建一个路径流,其中不包括所有隐藏的文件和目录,但是它们的后代仍然被列出。 这样我们得到:

Omitted:
.\.gitBut listed:
.\.git\COMMIT_EDITMSG
.\.git\config
.\.git\description
[...]

很容易理解为什么会这样。 Files.walk()返回所有后代文件的(惰性)流。 对.filter()的调用将删除从Stream中隐藏的那些,但这对可能适用于walk()实现的任何递归算法没有影响。 坦白说,这有点令人失望。 我们不能利用Java 7的Files.walkFileTree()方法,因为接收的FileVisitor类型不是@FunctionalInterface

但是,我们可以使用以下琐碎的逻辑来无效率地解决此限制:

Files.walk(new File(".").toPath()).filter(p -> !p.toString().contains(File.separator + ".")).forEach(System.out::println);

现在产生预期的

.
.\java8-goodies.iml
.\LICENSE.txt
.\pom.xml
.\README.txt
.\src
.\src\main
.\src\main\java
.\src\main\java\org
.\src\main\java\org\jooq
[...]

不过,好消息是新的Files.lines()方法。 以下示例显示了我们如何轻松地从文件中逐行读取,修剪每行(删除缩进)并过滤出空行:

Files.lines(new File("pom.xml").toPath()).map(s -> s.trim()).filter(s -> !s.isEmpty()).forEach(System.out::println);

以上收益:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.jooq</groupId>
<artifactId>java8-goodies</artifactId>
<version>1.0-SNAPSHOT</version>
[...]

结论

显然,惰性评估的概念会在社区中引起大量混乱,类似于Stream只能使用一次的事实。 我们敢打赌, Java 8 Streams API将成为新的Stack Overflow问题的唯一最大来源。

尽管如此, Streams API仍然很棒 ,下周在Java 8 Friday系列上,我们将看到如何利用lambda表达式和Streams 事物进行排序 ,然后再了解Java 8将如何改善数据库交互!

参考: Java 8 Friday Goodies Java的 合作伙伴 Lukas Eder在Java,SQL和JOOQ博客上提供的新的新I / O API 。

翻译自: https://www.javacodegeeks.com/2014/01/java-8-friday-goodies-the-new-new-io-apis.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/365351.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ashly理器4.8软件汉化版_AMD 处理器核心比英特尔多还更便宜?英特尔回应

IT之家 9 月 25 日消息 英特尔已在本月初发布了 11 代酷睿移动处理器&#xff0c;搭载 11 代酷睿的产品最早将在 10 月上市。现在&#xff0c;新浪科技访了英特尔公司中国零售销售集团总经理唐炯&#xff0c;就 11 代酷睿产品进行讨论。在谈到 AMD 处理器比英特尔便宜&#xff…

JAVA比较两个List集合的方法

import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.HashSet; import java.util.List; import java.util.Set;public class FindNumber { public static void main(String[] args) { // 注意&#xff1a;一定要使用创建对象…

js 解析php serialize,php如何解析jquery serialize 提交后的数据

客户端通过jquery serialize 提交表单数据$("#submit_survey").click(function(){ $.post(SITE_URLactivity/survey/savesurvey, {data:$(#survey_form).serialize()}, function(response){ if (response.error_code) { infotips(response.msg, $(.submit_tips)); } …

OutOfMemoryError:解决方案反模式

这些年来&#xff0c;我们一直密切关注以OutOfMemoryError消息的不同形式打包的问题。 通过专门的服务&#xff08;例如Google警报&#xff09;&#xff0c;每天就特定关键字的新问题进行摘要&#xff0c;使我们对应用程序因日志中的java.lang.OutOfMemoryError失败而出现的情况…

python在线问卷调查系统源代码_基于Python 练习1情况的在线问卷

Q1. 您每个月的生活费是&#xff1f;(单选题)Q2. 您在职的职位是&#xff1a;(单选题)Q3. 您的家庭背景&#xff1f;(单选题)Q4. 下列哪一个是Python中正确的变量名&#xff1f;()(单选题)A Sprout*1B 1SproutC Sprout 1D Sprout_1Q5. Turtle 中的 Write 命令是用来做什么的 ()…

leetcood学习笔记-58-最后一个单词的长度

题目描述&#xff1a; 第一次解答&#xff1a; class Solution:def lengthOfLastWord(self, s: str) -> int:Ls.strip().split(" ")if L[-1]"" :return 0return len(L[-1]) 优化后&#xff1a; class Solution:def lengthOfLastWord(self, s: str) ->…

Plyr – 简单,灵活的 HTML5 媒体播放器

Plyr 是一个简单的 HTML5 媒体播放器&#xff0c;包含自定义的控制选项和 WebVTT 字幕。它是只支持现代浏览器&#xff0c;轻量&#xff0c;方便和可定制的媒体播放器。还有的标题和屏幕阅读器的全面支持。 在线演示 源码下载 您可能感兴趣的相关文章网站开发中很有用的 …

第一章 SpringBoot快速入门

1.1、包依赖 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.14.RELEASE</version><relativePath/> <!-- lookup parent from repository --> …

使用Redis的简单消息队列

在本文中&#xff0c;我们将使用列表命令将Redis用作简单的消息队列。 假设我们有一个允许用户上传照片的应用程序。 然后在应用程序中&#xff0c;我们以不同大小显示照片&#xff0c;例如Thumb&#xff0c;Medium和Large。 在第一个实现中&#xff0c;我们可以承担在同一请…

solaris配置php,Solaris下安装Oracle_启动Oracle及监听

无论是在Linux下还是在Solaris下都安装过很多次Oracle&#xff0c;几乎都没成功过。最开始安装的时候连安装页面都见不到&#xff0c;后来&#xff0c;能够看到安无论是在Linux下还是在Solaris下都安装过很多次Oracle&#xff0c;几乎都没成功过。最开始安装的时候连安装页面都…

python es 数据库 ik_Linux系统:centos7下搭建ElasticSearch中间件,常用接口演示

一、中间件简介1、基础概念ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎&#xff0c;基于RESTful web接口。Elasticsearch是用Java开发的&#xff0c;并作为Apache许可条款下的开放源码发布&#xff0c;是当前流行的企业级搜索引擎…

【C++】满二叉树问题

/* 给出一棵满二叉树的先序遍历&#xff0c;有两种节点&#xff1a;字母节点&#xff08;A-Z&#xff0c;无重复&#xff09;和空节点&#xff08;#&#xff09;。要求这个树的中序遍历。输出中序遍历时不需要输出#。 满二叉树的层数n满足1<n<5。Sample Input: ABC#D#ESa…

NativeScript - JS 构建跨平台的原生 APP

使用 NativeScript&#xff0c;你可以用现有的 JavaScript 和 CSS 技术来编写 iOS、Android 和 Windows Phone 原生移动应用程序。由原生平台的呈现引擎呈现界面而不是 WebView&#xff0c;正因为如此&#xff0c;应用程序的整个使用体验都是原生的。 NativeScript 使您可以使用…

java乱码base64,解决 JAVA WebSocket 解析 base64 后中文字符串乱码

解决 JAVA WebSocket 解析 base64 后中文字符串乱码解决 JAVA WebSocket 解析 base64 后中文字符串乱码春风如贵客&#xff0c;一到便繁华。各位看官先赞再看&#xff0c;养成好习惯(●?&#xff40;●)前言&#xff1a;项目基于WebSocket实现了一个功能&#xff0c;其中要接受…

Riot - 比 Facebook React 更轻量的 UI 库

Riot 是一个类似 Facebook React 的用户界面库&#xff0c;只有3.5KB&#xff0c;非常轻量。支持IE8 浏览器的自定义标签&#xff0c;虚拟 DOM&#xff0c;语法简洁。Riot 给前端开发人员提供了除 React 和 Ploymer 之外的新选择&#xff0c;值得一试。 在线演示 源码下载…

python爬虫大众点评_Python爬虫(三)爬取大众点评网

大众点评的网站爬虫难点在于其对网页上的文字做了加密处理&#xff0c;所以学习了大佬的方法&#xff0c;链接如下&#xff1a;如下图所示&#xff0c;大众点评的评论数&#xff0c;价格和地址等信息对应在源码中都是方框&#xff0c;无法使用常规手段直接爬取到信息&#xff0…

[python3] torndb中的itertools.zip[AttributeError: module 'itertools' has no attribute 'izip']

在python3中&#xff0c;使用torndb进行查询时&#xff0c;遇到问题 AttributeError: module itertools has no attribute izip&#xff0c;解决该问题过程中耗费了不少时间&#xff0c;故把解决办法写下以便以后遇到该问题的人能更快速的解决&#xff1a; 因为python3中filter…

将jOOQ与Spring结合使用:代码生成

我们可能在本教程的第一部分中还记得jOOQ指出 jOOQ从您的数据库生成Java代码&#xff0c;并允许您通过其流畅的API构建类型安全的SQL查询。 本教程的第一部分描述了如何配置使用jOOQ的Spring驱动的应用程序的应用程序上下文&#xff0c;但没有描述如何使用jOOQ创建类型安全的S…

php文件上传 github,PHP的cURL文件上传

cURL介绍cURL是一个利用URL语法规定来传输文件和数据的工具&#xff0c;支持很多协议&#xff0c;如HTTP、FTP、TELNET等。PHP也支持cURL 库。本文将介绍 cURL 的一些高级特性&#xff0c;以及在PHP中如何运用它。PHP创建cURL的基本结构1)初始化curl_init()2)设置变量curl_seto…

FormatJS – 让你的 Web 应用程序国际化

FormatJS 是一个模块化的集合&#xff0c;保护各种 JavaScript 国际化库&#xff0c;例如格式化数字&#xff0c;日期和字符串。它包括一组建立在 JavaScript 的国际内置插件和全行业的国际化标准&#xff0c;再加上一套集成的通用模板和组件库。 在线演示 源码下载 您可能…