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

Java 8星期五

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

Java 8 Goodie:带有Lambdas的java.io

与文件系统进行交互在Java中有些痛苦。 CTMMC向我们展示了如何使用Java复制文件的示例 。 尽管仍然存在一些问题,至少,我们现在可以使用lambda和新的Streams API 遍历文件系统并列出文件 ! 这是我们已推送到GitHub存储库的FileFilterGoodies示例:

public class FileFilterGoodies {public static void main(String args[]) {listRecursive(new File("."));}/*** This method recursively lists all* .txt and .java files in a directory*/private static void listRecursive(File dir) {Arrays.stream(dir.listFiles((f, n) ->!n.startsWith(".")&&(f.isDirectory()||  n.endsWith(".txt")||  n.endsWith(".java")))).forEach(unchecked((file) -> {System.out.println(file.getCanonicalPath().substring(new File(".").getCanonicalPath().length()));if (file.isDirectory()) {listRecursive(file);}}));}/*** This utility simply wraps a functional* interface that throws a checked exception* into a Java 8 Consumer*/private static <T> Consumer<T>unchecked(CheckedConsumer<T> consumer) {return t -> {try {consumer.accept(t);}catch (Exception e) {throw new RuntimeException(e);}};}@FunctionalInterfaceprivate interface CheckedConsumer<T> {void accept(T t) throws Exception;}
}

上面程序的输出是:

\jOOQ's Java 8 Goodies.iml
\LICENSE.txt
\out
\out\production
\out\production\jOOQ's Java 8 Goodies
\out\production\jOOQ's Java 8 Goodies\org
\out\production\jOOQ's Java 8 Goodies\org\jooq
\out\production\jOOQ's Java 8 Goodies\org\jooq\java8
\out\production\jOOQ's Java 8 Goodies\org\jooq\java8\goodies
\out\production\jOOQ's Java 8 Goodies\org\jooq\java8\goodies\io
\out\production\jOOQ's Java 8 Goodies\org\jooq\java8\goodies\io\FileFilterGoodies$CheckedConsumer.class
\out\production\jOOQ's Java 8 Goodies\org\jooq\java8\goodies\io\FileFilterGoodies.class
\README.txt
\src
\src\org
\src\org\jooq
\src\org\jooq\java8
\src\org\jooq\java8\goodies
\src\org\jooq\java8\goodies\io
\src\org\jooq\java8\goodies\io\FileFilterGoodies.java

现在,这真的很棒,不是吗? 让我们分解上面的listRecursive()方法:

// With this method, we wrap the File[] array
// into a new Java 8 Stream, which has awesome
// new methods.
Arrays.stream(// The Java 1.2 File.listFiles() method luckily
// accepts a @FunctionalInterface, which can be
// instantiated using a lambda expression
// ...
// In this example, we'll just ignore the fact
// that listFiles can return nulldir.listFiles((f, n) ->!n.startsWith(".")&&(f.isDirectory()||  n.endsWith(".txt")||  n.endsWith(".java"))))// Each Stream (and also java.util.List) has this
// awesome forEach method, that accepts a Consumer.forEach(// Unfortunately, Java 8 Consumers don't allow
// throwing checked exceptions. So let's quickly
// wrap it (see details below) ...unchecked(// ... and pass another lambda expression to it,
// which prints the local path and recurses(file) -> {System.out.println(file.getCanonicalPath().substring(new File(".").getCanonicalPath().length()));if (file.isDirectory()) {listRecursive(file);}}));

下周还会有更多好吃的东西

请继续关注下周,当我们向您展示如何将Java 8 与jOOX一起使用XML进行改进时

参考: Java 8 Friday Goodies:java.io终于成功了! 从我们的JCG合作伙伴 Lukas Eder在JAVA,SQL和JOOQ博客中获得。

翻译自: https://www.javacodegeeks.com/2014/01/java-8-friday-goodies-java-io-finally-rocks.html

Java 8 Friday Goodies:java.io终于成功了!相关推荐

  1. q7goodies事例_Java 8 Friday Goodies:java.io终于成功了!

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

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

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

  3. Java-Runoob:Java Stream、File、IO

    ylbtech-Java-Runoob:Java Stream.File.IO 1.返回顶部 1. Java 流(Stream).文件(File)和IO Java.io 包几乎包含了所有操作输入.输出 ...

  4. java epoll select_Java 非阻塞 IO 和异步 IO

    点击上方 Java后端,选择 设为星标 优质文章,及时送达 作者 | HongJie 链接 | javadoop.com/post/nio-and-aio 本文将介绍非阻塞 IO 和异步 IO,也就是 ...

  5. Java AIO初探(异步网络IO)

    Java AIO初探(异步网络IO) 原文: http://www.blogjava.net/killme2008/archive/2009/09/20/295743.html 按照<Unix网 ...

  6. Java 8 Friday Goodies:Lambda和XML

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

  7. java httputil_Java网络编程与NIO详解2:JAVA NIO 一步步构建IO多路复用的请求模型

    本文转载自:https://github.com/jasonGeng88/blog 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 http ...

  8. java中的NIO和IO到底是什么区别?20个问题告诉你答案

    摘要:NIO即New IO,这个库是在JDK1.4中才引入的.NIO和IO有相同的作用和目的,但实现方式不同,NIO主要用到的是块,所以NIO的效率要比IO高很多. 本文分享自华为云社区<jav ...

  9. java实践11之网络IO BIO和NIO(上)

    文章目录 java实践11之网络IO BIO和NIO(上) 1 BIO: BIO的使用demo 优化版使用线程池实现异步处理 为何已经异步处理了还说BIO是阻塞的? BIO带来的问题 2 NIO ja ...

最新文章

  1. django-debug-toolbar使用指南
  2. 我好像还没睡醒,在说胡话...
  3. 用Red5搭建支持WEB播放的实时监控视频
  4. 005_FastDFS分布式nginx访问
  5. 中国-中东欧国家特色农产品 云上国际农民丰收节贸易会
  6. 将java 打包成exe 可执行文件
  7. Scala教程之:Future和Promise
  8. 前端学习(2972):使用mock假数据
  9. java上传rar文件_java实现上传zip/rar压缩文件,自动解压
  10. laravel的一些笔记
  11. Vrep中支持的运动规划算法
  12. C++赋值操作符重载
  13. angularjs外部文件中的控制器使用
  14. DDFE 技术周刊(第十期)2017.1.9
  15. Golang 1.16 新特性-embed 包及其使用
  16. Openlayer图层载入时进行坐标系的转换
  17. Rust学习教程32 - 动态数组Vec
  18. 判断两个矩形是否重叠
  19. 腿部建模布线解析—3D角色建模师必了解的人体结构
  20. 脚本不得关闭非脚本打开的窗口。Scripts may close only the windows that were opened by it...

热门文章

  1. webpack打包器小结(1)
  2. 会话技术Cookie
  3. spring boot测试_测试Spring Boot有条件的合理方式
  4. facelets_Java EE 8中的MVC 1.0:使用Facelets入门
  5. 框架中建立浮动框架_建立代理,而不是框架
  6. 香草 jboss 工具_如何为JBoss Developer Studio 8设置BPM和规则工具
  7. fest556_AssertJ Fest Hamcrest
  8. central maven_一键发布到Maven Central的方法
  9. nio 读取目录所有文件_在NIO.2中使用文件和目录
  10. spring 4.3.x_如何在Spring 3.x中使用事件