我喜欢新的Java8 StreamAPI,并希望不仅将其用于一个文件。通常,我使用以下代码:
Stream<String> lines = Files.lines(Paths.get("/somepathtofile"));
但是,如果可能的话,如何在一个流中读取两个文件呢?
没有任何额外的帮助程序功能或外部库,最简单的方法是:
Stream<String> lines1 = Files.lines(Paths.get("/somepathtofile"));
Stream<String> lines2 = Files.lines(Paths.get("/somepathtoanotherfile"));
Stream.concat(lines1, lines)
.filter(...)
.forEach(...);
如果Files.lines
尚未声明抛出受检查的异常,则可以
Stream.of("/file1", "/file2")
.map(Paths::get)
.flatMap(Files::lines)....
但是,a,我们不能这样做。有几种解决方法。一种是制作自己的版本,将Files.lines
其称为标准版本,然后将其IOException
作为捕获并重新抛出UncheckedIOException
。另一种方法是使用抛出检查异常的方法来制造函数的更通用的方法。它看起来像这样:
@FunctionalInterface
public interface ThrowingFunction<T,R> extends Function<T,R> {
@Override
public default R apply(T t) {
try {
return throwingApply(t);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public static<T,R> Function<T,R> wrap(ThrowingFunction<T,R> f) {
return f;
}
R throwingApply(T t) throws Exception;
}
然后
Stream.of("/somefile", "/someotherfile", "/yetanotherfile")
.map(Paths::get)
.flatMap(ThrowingFunction.wrap(Files::lines))
.....
那里有几个库需要为每个功能接口编写类似上面的内容的麻烦。
我想有一个以上的regex如下所示,我如何将其添加到flatmap迭代器中,以便在单个流读取期间将该行的所有匹配值列表? 这个问题是从匹配模式和使用Java8 stream将流写入文件中的扩展
问题内容: 我知道Java不允许我们扩展多个类。我知道接口也存在,并且我这次不想使用它们。是否存在某种技巧或解决方法来扩展Java中的多个类?如果是,请同时提供示例代码。 问题答案: 您可以使用界面和组合 轻松 完成此操作。 问题是为什么你会问这样的事情?为什么不希望在“此时”使用接口? 您必须知道Java仅允许实现的单一继承。您在SO上度过了七个月,因此,您肯定必须知道如何使用搜索功能。这个问题
我有一个需求,我想找到运行的jar中的jar的路径。假设有一个名为example-1.0.0.jar的罐子在一个名为main-1.0.0.jar.的运行罐子里,我想知道运行罐子里存在的罐子的路径。 编辑1:例如,jar是项目中的一个依赖项。例如,假设我的项目中有一个log4j依赖项,我想知道log4j jar在类中的路径。我怎样才能找到路?
我们使用PHP7.0运行XAMPP是因为我们的新产品需要PHP7。 但是有些老项目使用等函数,这些函数在PHP7.0中被删除。 那么,有没有办法在XAMPP中轻松更改PHP版本呢? 注意:请不要建议将旧项目升级到与新版本兼容,因为我不能这样做,因为作为一个开发人员(只是一个员工),我不能得到这些决定。
问题内容: 我已经构建了一种通过$ http返回资源的复杂方法。 该方法返回一个Promise,然后检查资源是否存在我的本地缓存。如果这样做,它将返回缓存的资源,否则,将发出$ http请求。在资源被缓存后,这种方法效果很好,但是在整个应用程序中,我有多种功能正在按此方法加载,并且每个函数都会发出http请求,因为资源尚未返回和缓存。 我想出了一个简单的检查方法来解决此问题,但我觉得应该有一个更好
我想读取Dockerfile中的变量,该变量在文件中定义。有什么办法可以做到这一点吗? 这是我的DockerFile: