gpt4 book ai didi

Java可以将函数添加到集合中顺序执行吗?

转载 作者:行者123 更新时间:2023-12-02 01:32:06 25 4
gpt4 key购买 nike

我是 Java 新手。我想将一些Python代码重写为Java以实现基本相同的功能。我的 Python 代码中的一部分是按顺序执行函数。我可以在 Java 中创建类似的方法集合吗?

process_workflow.py

workflow = [
stage1,
stage2,
stage3
]

def process_workflow(workflow: list):
for stage in workflow: # each 'stage' is a method
stage()

每个阶段的方法都在另一个Python脚本中定义。阶段.py

def stage1():
...

def stage2():
...

def stage3():
...

我的暂定 Java 代码:

class Stages {
void stage1() {
}
void stage2() {
}
void stage3() {
}
}
class Main {
public static void main(String[] args) {
Stages stage_obj = new Stages();

Collection workflow = new ArrayList();
workflow.add(stage_obj.stage1);
workflow.add(stage_obj.stage2);
workflow.add(stage_obj.stage3);

Iterator workflowIterator = workflow.iterator();
// ...

}
}

最佳答案

您可以在 Java 8+ 中使用 Functional Interfaces 来完成此操作和 Method References .

在您的情况下,一个没有参数且没有 throws 子句的 void 方法,您的方法与 Runnable 接口(interface)方法匹配:

@FunctionalInterface
public interface Runnable {
void run();
}

所以你的代码是:

Stages stage_obj = new Stages();
List<Runnable> workflow = Arrays.asList(
stage_obj::stage1,
stage_obj::stage2,
stage_obj::stage3
);
void processWorkflow(List<Runnable> workflow) {
for (Runnable stage : workflow)
stage.run();
}

如果方法是静态,例如他们不需要访问实例字段,您的代码将是:

List<Runnable> workflow = Arrays.asList(
Stages::stage1,
Stages::stage2,
Stages::stage3
);

processWorkflow 方法仍然是相同的。

如您所见,这与您的 Python 代码非常匹配,但它是完全类型安全的。

关于Java可以将函数添加到集合中顺序执行吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55883499/

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