【发布时间】:2018-05-29 22:33:16
【问题描述】:
有没有办法让以下动作实际上是两个动作合二为一?
static int process(String[] cmd, File dir, Consumer<? super String> action) throws IOException {
ProcessBuilder pb = new ProcessBuilder(cmd);
pb.directory(dir);
pb.redirectErrorStream(true);
Stopwatch sw = Stopwatch.createStarted();
Process p = pb.start();
int exit = -1;
try (BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()))) {
br.lines().forEach(action);
} finally {
log.debug("Ending process {} with exist code {} in time {}", pb.command(),
exit = p.destroyForcibly().exitValue(), sw);
}
return exit;
}
所以Consumer<? super String> action 我通常将其指定为log::debug 或像AtomicReference::set 这样的自定义函数,但是如果我想要两者兼而有之,或者第三个呢?如何让操作执行一些独立的操作?
我知道我可以创建一个自定义的 Consumer 来做我想做的任何事情,但我认为这会非常方便
如果我几乎可以将操作视为 nvarargs 等价物,但对于功能/操作。
【问题讨论】:
标签: java function lambda java-8 consumer