在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

Java 8 Friday Goodies:新的新I / O API相关推荐

  1. q7goodies事例_Java 8 Friday Goodies:新的新I / O API

    q7goodies事例 在Data Geekery ,我们喜欢Java. 而且,由于我们真的很喜欢jOOQ的流畅的API和查询DSL ,我们对Java 8将为我们的生态系统带来什么感到非常兴奋. 我们 ...

  2. java字符串去重复_Java 8新特性:字符串去重

    本文首发与InfoQ. 8月19日,Oracle发布了JDK 8u20,JDK 8u20包含很多新特性,比如Java编译器更新.支持在运行时通过API来修改MinHeapFreeRatio和MaxHe ...

  3. java 可控异常_java异常处理,重新认识java异常,java7异常处理的新特性!

    原标题:java异常处理,重新认识java异常,java7异常处理的新特性! 在程序中,错误可能产生于程序员没有预料的各种情况,或者是超出了程序员可控范围的环境因素,如用户的坏数据.试图打开一个根本不 ...

  4. Java 5~11各个版本新特性史上最全总结

    Java 5 Java5开发代号为Tiger(老虎),于2004-09-30发行 特性列表 泛型 枚举 自动装箱拆箱 可变参数 注解 foreach循环(增强for.for/in) 静态导入 格式化( ...

  5. java9特性_96.java基础10(java9/10/11新特性)

    126.java 9 新特性1(模块化功能): 1.java模块化 2.java 交互式环境jshell 3.泛型 package com.atguigu.java; import org.junit ...

  6. Java 9 中的9个新特性

    转载自 强悍!Java 9 中的9个新特性 你可能已经听说过 Java 9 的模块系统,但是这个新版本还有许多其它的更新. 这里有九个令人兴奋的新功能将与 Java 9 一起发布. Java 平台级模 ...

  7. 有效期判断功能 java_有效的Java第三版有哪些新功能?

    有效期判断功能 java 自从听说即将出版的有效Java 第三版以来,我一直想知道其中有什么新内容. 我假设将涵盖自Java 6以来引入Java的功能,的确如此. 但是,第三版Java开发人员经典版也 ...

  8. java中regex_Java 9中的新Regex功能

    java中regex 最近,我收到了Packt出版的Anubhava Srivastava提供的免费书籍" Java 9 Regular Expressions" . 这本书是一个 ...

  9. Java番外篇2——jdk8新特性

    Java番外篇2--jdk8新特性 1.Lambda 1.1.无参无返回值 public class Test {interface Print{void print();}public static ...

最新文章

  1. 当前国内有哪些公司是做OKR管理软件做的比较好的?
  2. element ui分页怎么做_elementUI实现分页
  3. VSS admin用户忘记密码的解决方法
  4. 数据结构经典算法集锦
  5. OER 7451 in Load Indicator : Error Code = OSD-0450
  6. SQL SERVER数据库附加是只读的解决方法
  7. Intel 64/x86_64/x86/IA-32处理器标志寄存器详解(2) - 32位EFLAGS - 80386(386, Intel386)/80486(486, Intel486)
  8. narwal无法连接机器人_库卡机器人控制系统主机出现MFC3故障维修
  9. oracle数据库中sql语句性能提升之to_char改造
  10. 手把手带你了解安卓Unity3D手游
  11. maven私服搭建及应用
  12. 史上最详细Oracle 10g安装教程
  13. 微信小程序布局技巧(一)
  14. 超声光学成像突破衍射极限
  15. 计算机vga,电脑启用vga模式是什么意思?怎么修复?
  16. Idea关于Module is not backed by gradle的问题
  17. photoshop读书笔记
  18. python numpy 版本问题:error module compiled against API version 0xc but this version of numpy is 0xb
  19. 黄页宝贝工具栏软件发布了
  20. 2020年起重机司机(限桥式起重机)考试题及起重机司机(限桥式起重机)考试技巧

热门文章

  1. ReviewForJob——快速排序(基于插入排序)+快速选择(快速排序变体)
  2. maven(6)仓库
  3. MySQL 对于千万级的大表要怎么优化?
  4. apache ignite_Kubernetes集群上的Apache Ignite和Spring第1部分:Spring Boot应用程序
  5. 两个时间之间是多少小时_那是两个小时我不会回来
  6. hotspot 垃圾收集器_HotSpot增量Java垃圾收集器
  7. eclipse 扩展_Eclipse扩展的轻量级集成测试
  8. glass fish_Glass Fish 4.0.1中的Jersey SSE功能
  9. weakreference_Java中WeakReference,SoftReference,PhantomReference和Strong Reference之间的区别...
  10. java 正则表达式使用_如何用正则表达式杀死Java