假设我有一个字符串列表,我想将这些字符串用作流利的构建器的输入。
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);