假设我有一个字符串列表,我想将这些字符串用作流利的构建器的输入。

List<String> scripts;

//initialize list

ScriptRunnerBuilder scriptRunnerBuilder = new ScriptRunnerBuilder();

BiFunction<String,ScriptRunnerBuilder,ScriptRunnerBuilder> addScript =
(script,builder) -> builer.addScript(script);

scriptRunnerBuilder = scripts.stream.map(script ->
addScript.apply(script,scriptRunnerBuilder)).......

scriptRunnerBuilder.build();


我可以使用哪个终端操作,以便对列表中的所有元素调用addScript函数?

问题是ScriptRunnerBuilder是不可变的,因此ScriptRunnerBuilder.addScript()返回一个新的ScriptRunnerBuilder对象,而不是修改现有的对象-因此我不能只是一个foreach。

我的意图是携带addScript()调用的结果,并将其用作流中下一个元素的输入

最佳答案

以最简单的方式,这应该:

// create your builder
ScriptRunnerBuilder builder = new ScriptRunnerBuilder();

// add all scripts
scripts.forEach(script-> builder.addScript(script))

build results
scriptRunnerBuilder.build();


由于构建器将聚合所有数据,并且您已经在forEach lambda外部创建了数据,因此可以直接访问它。这将导致更少的代码和相同的结果。

或如@Holger建议的那样:

scripts.forEach(builder::addScript);

10-01 14:35