java 8 lambda

我最近需要读取一堆文件,而不是仅仅抓住我和可能是大多数开发人员拥有的旧FileUtils.java,然后从一个项目复制到另一个项目,我决定快速看看其他方法。

是的,我知道有Commons IO和Google IO ,我为什么还要打扰? 他们可能会做得更好,但是我想检查一下NIO jdk类并同时使用lambda。而且,老实说,我认为这实际上是一段非常整齐的代码。

所以我有一个特定的用例:
我想逐行从整个目录树中读取所有源文件。

该代码的作用是,它使用Files.walk从起点递归获取所有路径,并创建一个流,然后将其过滤为仅以所需扩展名结尾的文件。 对于每个文件,我使用Files.lines创建一个字符串流,每行一个。 我修剪一下,过滤掉空的并将其添加到return集合中。

一切都非常简洁,这要归功于新的构造。

package net.briandupreez.blog.java8.io;import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.FileVisitOption;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;/*** RecursiveFileLineReader* Created by Brian on 2014-05-26.*/
public class RecursiveFileLineReader {private transient static final Log LOG = LogFactory.getLog(RecursiveFileLineReader.class);/*** Get all the non empty lines from all the files with the specific extension, recursively.** @param path      the path to start recursion* @param extension the file extension* @return list of lines*/public static List<String> readAllLineFromAllFilesRecursively(final String path, final String extension) {final List<String> lines = new ArrayList<>();try (final Stream<Path> pathStream = Files.walk(Paths.get(path), FileVisitOption.FOLLOW_LINKS)) {pathStream.filter((p) -> !p.toFile().isDirectory() && p.toFile().getAbsolutePath().endsWith(extension)).forEach(p -> fileLinesToList(p, lines));} catch (final IOException e) {LOG.error(e.getMessage(), e);}return lines;}private static void fileLinesToList(final Path file, final List<String> lines) {try (Stream<String> stream = Files.lines(file, Charset.defaultCharset())) {stream.map(String::trim).filter(s -> !s.isEmpty()).forEach(lines::add);} catch (final IOException e) {LOG.error(e.getMessage(), e);}}}

翻译自: https://www.javacodegeeks.com/2014/05/playing-with-java-8-lambdas-paths-and-files.html

java 8 lambda

java 8 lambda_玩Java 8 – Lambda,路径和文件相关推荐

  1. Java NIO 学习笔记(五)----路径、文件和管道 Path/Files/Pipe

    目录: Java NIO 学习笔记(一)----概述,Channel/Buffer Java NIO 学习笔记(二)----聚集和分散,通道到通道 Java NIO 学习笔记(三)----Select ...

  2. Java如何创建不存在的指定路径的文件

    实际应用中,要在指定位置创建一个文件,但文件及文件之前的目录都不存在,此时可用以下方法进行创建. File f = new File("I:" + File.separator + ...

  3. 玩Java 8 – Lambda,路径和文件

    我最近需要读取一堆文件,而不是仅仅抓住我和可能是大多数开发人员拥有的旧FileUtils.java,然后从一个项目复制到另一个项目,我决定快速了解其他方法. 是的,我知道有Commons IO和Goo ...

  4. lambda 高并发_玩Java 8 – Lambda和并发

    lambda 高并发 因此Java 8不久前发布,具有大量功能和更改. 我们所有的Java狂热者一直在等待这一点,从他们最初宣布Java 7的所有强大功能开始一直到最终被取消. 我最近才有时间实际开始 ...

  5. 玩Java 8 – Lambda和并发

    因此Java 8不久前发布,具有许多功能和更改. 我们所有的Java狂热者一直在等待这个历史,从他们最初宣布Java 7的所有强大功能开始一直到最终被取消. 我最近才有时间实际开始给它一个真实的外观, ...

  6. Java笔记 - 黑马程序员_08(Lambda表达式,接口组成更新,方法引用,类加载器,反射)

    1. Lambda 1.1 函数式编程思想概述 在数学中,函数就是有输入量.输出量的一套计算方案,也就是"数据做操作" 面向对象思想强调"必须通过对象的形式来做事情&qu ...

  7. java如何处理锯齿_java – 平滑锯齿的路径

    我在另一天参加了线程 Image/Graphic into a Shape,并通过向"区域"中迭代地添加一个矩形,并尝试获取图像的轮廓.那很慢 该示例代替构建GeneralPath ...

  8. 用通俗易懂的大白话搞明白Java里的函数式编程和Lambda表达式

    今天,用通俗易懂的大白话来彻底搞明白Java里的函数式编程和Lambda表达式 为什么引入函数式编程,lambda表达式? 大家都知道,JDK1.8引入了函数式编程,lambda表达式. 那有没有想过 ...

  9. IDEA报错解决:Error:(33, 35) java: -source 7 中不支持 lambda 表达式 (请使用 -source 8 或更高版本以启用 lambda 表达式)

    晚上在用IDEA的时候遇到了报错: Error:(33, 35) java: -source 7 中不支持 lambda 表达式(请使用 -source 8 或更高版本以启用 lambda 表达式) ...

最新文章

  1. 精通JavaScript--07设计模式:行为型
  2. 裁员大潮来袭,程序员面试的这些技巧收藏好!
  3. 转:AIX rcp跨主机远程拷贝数据
  4. [H265/HEVC]开源项目
  5. CSS 多浏览器兼容又一方案
  6. CommunityServer读取Blog分析(一)
  7. EV3 直接命令 - 第 4 课 用两个驱动轮精确地移动小车
  8. python 管道队列_关于python:Multiprocessing-管道与队列
  9. 阿里云NAS备份服务
  10. 安卓抓包软件_你们要的抓包神器!以及抓包原理
  11. android文件搜索广播,Android 实现无网络传输文件
  12. Java Programming Test Question 2
  13. js定位div坐标存入mysql_js实现获取div坐标的方法
  14. vmsd文件+服务器,VMWARE ESX中利用SnapShot(快照)文件恢复虚拟机数据
  15. 报错Exception opening port “18080“ (port may be in use), cause: “java.net.BindException: Address alrea
  16. ios APP加密探究几维安全iOS 代码混淆效果参考
  17. c语言中输出姓名身高,c语言输出身高:男生身高=(爸身高+妈身高)×0.54 女生身高=(爸身高×0.92+妈身高)÷2...
  18. Axure RP 9.0.0.3727 授权码
  19. 设置 Linux 别名命令 alias 永久生效的方法
  20. 前端面经知识总结及参考回答 —— 尽量日更

热门文章

  1. E. Pattern Matching(题意理解+拓扑排序)
  2. Codeforces Round #663 (Div. 2)
  3. mybatis源码阅读(五) ---执行器Executor
  4. Spring MVC常用注解,你会几个?
  5. 这本书强烈推荐看看!
  6. Photoshop的绘图工具
  7. Mybatis+MySQL动态分页查询数据经典案例
  8. java实现打印倒直角三角形
  9. 263. 丑数---LeetCode---JAVA
  10. admiration音标是什么_英语admiration的意思解释|读音发音|相关词语_英语词典_词林在线词典...