gpt4 book ai didi

java - 传递将参数传递给方法的 Lambda

转载 作者:行者123 更新时间:2023-12-02 03:59:13 25 4
gpt4 key购买 nike

我正在寻找一种将代码块传递给方法的方法,然后该方法将对传递给方法的其他参数执行操作,获取这些操作的结果,并将这些结果传递给传递给该方法的代码块。为了清楚起见:

private static void method1(String filename, int sheetNum) {
runOnSheet(filename, () -> {
doStuffWithStream(FileInputStream fileStream); // Does something with a file stream
doOtherStuffWithStream(FileInputStream fileStream); // Does something else with a file stream
});
}

// Elsewhere
private static void runOnFile(String fileName, Runnable block1) {
try {
fileStream = new FileInputStream(fileName);
} catch (IOException e) {
e.printStackTrace();
}

block1.run(); // I'd like to pass fileStream to this code block. Ideally i could do block1.run(fileStream );

fileStream.close();
}

我希望能够在需要打开文件、在流上运行一些代码以及关闭流的任何地方重用 runOnFile。
我实际上想做的更复杂,除了 FileInputStream 之外还使用其他库,但我希望完成的结构是相同的。

感谢您的帮助!

最佳答案

Java 8+ 有一个名为 Consumer 的类,可用于您的用例: https://docs.oracle.com/javase/8/docs/api/java/util/function/Consumer.html

private static void method1(String filename, int sheetNum) {
runOnFile(filename, (fileStream) -> {
doStuffWithStream(fileStream);
doOtherStuffWithStream(fileStream);
});
}

// Elsewhere
private static void runOnFile(String fileName, Consumer<FileInputStream> block1) {
try {
fileStream = new FileInputStream(fileName);
} catch (IOException e) {
e.printStackTrace();
}

block1.accept(fileStrean);

fileStream.close();
}

编辑:按照 Dimitri 使用 try-with-resource 语法的建议:

// Elsewhere
private static void runOnFile(String fileName, Consumer<FileInputStream> block1) {
try (FileInputStream fis = new FileInputStream(fileName)) {
block1.accept(fis);
} catch (IOException e) {
e.printStackTrace();
}
}

关于java - 传递将参数传递给方法的 Lambda,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44828695/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com