java 8 lambda_玩Java 8 – Lambda,路径和文件

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

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

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

相关文章

设置花里胡哨的Xshell字体与背景颜色(超全)

大部分运维和开发经常接触到的客户端连接工具很多都是Xshell&#xff0c;但是经常看到别人的背景色和字体都是五颜六色&#xff0c;还有护眼色的背景&#xff08;想必大家也会遇到在深夜加班时为了不打扰身边小伙伴的休息不开灯&#xff0c;打开Xshell时可以闪瞎人眼的白色背景…

Jakarta EE贡献–入门

您是否有兴趣帮助Jakarta EE向前发展&#xff1f; 我也是。我想提供一些详细信息&#xff0c;以帮助有兴趣入门的人。 步骤1&#xff1a; 开始捐款的第一步是签署Eclipse Foundation Committer and Contributor Agreement&#xff08;ECA&#xff09;&#xff1a; https : //…

Ubuntu “sudo apt-get update”报错

一 sudo apt-get update作用 从服务器拉取可用的包到本地 二 出错情况 Ign:9 https://download.sublimetext.com apt/stable/ Packages Ign:10 https://download.sublimetext.com apt/stable/ Translation-en_US Ign:11 https://download.sublimetext.com apt/stable/ Transl…

dpkg:错误:无法新建文件 ‘/var/lib/dpkg/info/format-new’: 没

错误 dpkg&#xff1a;错误&#xff1a;无法新建文件 ‘/var/lib/dpkg/info/format-new’: 没有那个文件或目录 E: Sub-process /usr/bin/dpkg returned an error code (2) 解决方法 1.尝试去查看没有那个文件或目录 2.逐级进入目录&#xff0c;返现没有的是 info 3.用root权限…

add-apt-repository命令详解

该命令是通过PPA源方式安装软件的添加PPA源到Source list中的命令&#xff0c;该软件安装方式的流程为&#xff1a; 1.搜索PPA软件源&#xff0c;如在Google上软件名称关键字 PPA &#xff0c;或者也可直接到 launchpad.net 上搜索2.sudo apt-add-repository ppa_source_name…

过度配置堆上的OutOfMemoryError

在分配一个应该很适合我为JVM提供的堆中的数据结构时&#xff0c;为什么会出现OutOfMemoryError&#xff1f; 这是我最近遇到的一个问题。 确实&#xff0c;当查看开发人员要完成的工作并通过-Xmx参数对提供给JVM的堆大小进行三重检查时&#xff0c;似乎确实存在着一些可疑之处…

E: Couldn‘t find any package by regex ‘python3.6‘的解决方式

一 问题描述 安装python较高版本。按照网上提供的参考资料&#xff0c;运行相关命令 sudo apt-get install python-software-properties sudo apt-get install software-properties-common sudo add-apt-repository ppa:jonathonf/python-3.6 sudo apt-get update sudo apt…

如何在Java中修复表达式的非法开头

您是否遇到过这个令人难以置信的错误&#xff0c;想知道如何解决它&#xff1f; 让我们浏览一下这篇文章&#xff0c;研究如何解决表达式Java非法开头错误。 这是一个动态错误&#xff0c;这意味着编译器会发现某些不符合Java编程规则或语法的内容。 初学者大多会遇到Java中的…

apt-cache 命令

一 命令介绍 apt-cache 命令可显示 APT 内部数据库里的多种信息。这些信息是从 sources.list 文件内聚集不同来源的缓存。于运行 apt update 运作时产生的。 APT包管理器工作在软件包元数据的本地缓存上。通过apt-cache命令&#xff0c;可以查询本地APT缓存并获得相关信息。 …

apt-get install 和pip install 、 apt与apt-get之间的区别 的区别

1 apt-get install 和pip install 的区别 区别&#xff1a; pip install 主要安装pypi上已经上传的包或库&#xff0c;主要和编程语言python 有关的包&#xff0c;可以选择版本&#xff0c;或者在已有的新版本上安装旧版本sudo apt-get install 是用于系统升级下载相关的软件…

Ubuntu下环境变量

一 环境变量是什么 环境变量一般是指在操作系统中用来指定操作系统运行环境的一些参数。如:临时文件夹位置和系统文件夹位置等。简单理解:就是系统运行时所需要的一些参数。

高效的企业测试-结论(6/6)

该系列的最后一部分将涵盖其他端到端测试&#xff0c;生产中的测试以及各部分的结论。 进一步的端到端测试和生产中的测试 除了仅验证单个被测应用程序并模拟外部问题的系统测试之外&#xff0c;我们的管道还必须包括完整的端对端测试&#xff0c;以验证整个系统。 好消息是&…

在Word中如何调整编号和文字之间的间距?

https://jingyan.baidu.com/article/48b558e32a80b53e39c09a77.html 首先&#xff0c;打开或者新建一份需要编辑的Word文档。如图&#xff1a; 2 接着&#xff0c;选中需要调整编号与文字之间间距的文字。如图&#xff1a; 3 接着&#xff0c;右键单击鼠标&#xff0c;在弹…

word编号和文本间距过大

问题&#xff1a; word中编号和文本间距过大 解决办法&#xff1a; 在正文中&#xff0c;调整列表缩进——更多——编号之后——设置为“空格”。 如果经过1步骤后&#xff0c;正文中的编号和后面的问题间距过大&#xff0c;可以执行, 段落——缩进——左侧——设置为0——缩进…

将Spock 1.3测试迁移到Spock 2.0

了解Spock 2.0 M1&#xff08;基于JUnit 5&#xff09;的期望&#xff0c;如何在Gradle和Maven中迁移到它以及为什么报告发现的问题很重要&#xff1a;&#xff09;。 重要说明 。 我绝对不建议您永久将您的现实项目迁移到Spock 2.0 M1&#xff01; 这是2.x的第一个&#xff0…

Word使用中常用的快捷键

1. 字体放大缩小 Ctrl ] 放大字体 Ctrl [ 缩小字体 选中文本&#xff0c;按快捷键即可看到效果。 2 对齐文本 左对齐&#xff1a;Ctrl L 右对齐&#xff1a;Ctrl R 居中对齐&#xff1a;Ctrl E 3 符号上下标 下标&#xff1a;【Ctrl】【】 上标&#xff1a;【C…

创建快捷方式时如何不带“快捷方式“后缀字样?

方法一&#xff1a; 去除“快捷方式”字样的方法&#xff1a; 创建快捷方式&#xff0c;使用上述方法比较繁琐&#xff0c;我们往往直接右击要创建快捷方式的文件或文件夹&#xff0c;然后“发送到”→“桌面快捷方式”。这样创建的&#xff0c;还会带“快捷方式”字样&#xf…

java akka_用于大型事件处理的Akka Java

java akka我们正在设计一个大型的分布式事件驱动系统&#xff0c;用于跨事务数据库的实时数据复制。 来自源系统的数据&#xff08;消息&#xff09;在到达目的地之前经历了一系列转换和路由逻辑。 这些转换是多进程和多线程的操作&#xff0c;包括可以同时执行的较小的无状态步…

xftp的简单使用

xftp的简单使用 1.下载并安装Xftp工具。打开Xftp工具&#xff0c;点击“新建”。 2.在“新建会话属性”中选择“名称”为主机命名&#xff0c;在“主机”栏输入主机IP&#xff0c;“协议”和“端口号”使用sftp和22&#xff0c;在“用户名”和“密码“栏输入账户密码。点…

与OutOfMemoryError相关的JVM参数

JVM提供了有用的参数来处理OutOfMemoryError 。 在本文中&#xff0c;我们要强调那些JVM参数。 在对OutOfMemoryError进行故障排除时&#xff0c;它可能对您很方便。 这些JVM参数是&#xff1a; -XX&#xff1a; HeapDumpOnOutOfMemoryError -XX&#xff1a;HeapDumpPath -XX…