我正在看一些java教程,并不确定' - >'做了什么,在谷歌上找不到任何关于它的东西.
这是我看到的一些使用它的代码:
myShapesCollection.stream()
.filter(e -> e.getColor() == Color.RED)
.forEach(e -> System.out.println(e.getName()));
Run Code Online (Sandbox Code Playgroud) 我正在使用第三方库来处理大量数据集.这个过程偶尔会进入一个无限循环(或被阻止 - 不知道为什么也不能进入代码).我想在一段时间之后杀死它并继续下一个案例.一个简单的例子是:
for (Object data : dataList) {
Object result = TheirLibrary.processData(data);
store(result);
}
Run Code Online (Sandbox Code Playgroud)
processData通常最多需要1秒钟.我想设置一个计时器,在10秒之后杀死processData()
编辑我会很感激代码片段(我没有使用线程).Executor方法看起来很有用但我不太清楚如何开始.此外,更常规方法的伪代码对我来说太笼统了.
@Steven Schlansker - 建议除非第三方应用程序预期中断,否则它将无效.再次详述和示例将被理解
编辑我从同事Sam Adams那里得到了我想要的精确解决方案,我将其作为答案.它比其他答案更详细,但我会给他们两个投票.我将Sam的标记为已批准的答案
Java中有没有一种方法可以以异步方式将一个文件复制到另一个文件中?我试图找到类似于C# 中的Stream.CopyToAsync的东西。
我想要实现的是从互联网下载一系列约 40 个文件,这是我为每个文件想到的最好的结果:
CompletableFuture.allOf(myFiles.stream()
.map(file -> CompletableFuture.supplyAsync(() -> syncDownloadFile(file)))
.toArray(CompletableFuture[]::class))
.then(ignored -> doSomethingAfterAllDownloadsAreComplete());
Run Code Online (Sandbox Code Playgroud)
哪里syncDownloadFile
:
private void syncDownloadFile(MyFile file) {
try (InputStream is = file.mySourceUrl.openStream()) {
long actualSize = Files.copy(is, file.myDestinationNIOPath);
// size validation here
} catch (IOException e) {
throw new RuntimeException(e);
}
}
Run Code Online (Sandbox Code Playgroud)
但这意味着我在任务执行器内部有一些阻塞调用,我想避免这种情况,所以我不会一次阻塞太多执行器。
我不确定 C# 方法内部是否执行相同的操作(我的意思是,必须有东西下载该文件,对吗?)。
有更好的方法来实现这一点吗?