【发布时间】:2021-11-26 15:08:50
【问题描述】:
总的来说,我对流和编写代码还是很陌生。
我有这两种方法:
方法一:
private String firstMethod (String fieldAlias, String someName) {
return Stream.of(
fieldAlias + ".field1",
fieldAlias + ".field2",
fieldAlias + ".field3",
someName + ".NAME"
).collect(Collectors.joining(" AND ", "(", ")"));
}
方法二:
private String secondMethod (String fieldAlias, String someValue) {
return Stream.of(
fieldAlias + ".field1",
fieldAlias + ".field2",
fieldAlias + ".field3",
someName + ".VALUE"
).collect(Collectors.joining(" AND ", "(", ")"));
}
这是我要提取的部分,可以从流中调用的单独方法(以避免重复代码):
fieldAlias + ".field1",
fieldAlias + ".field2",
fieldAlias + ".field3"
我尝试创建一个方法来返回三个字符串的列表,并以某种方式在两个方法的流中从列表中流式传输字符串。返回列表没有问题,但我只是不知道如何将该列表中的字符串合并到现有流中。任何帮助将不胜感激!
【问题讨论】:
-
我不太确定您的要求是什么,但您的示例对于流来说似乎是多余的,或者至少可以通过完全传递第 4 个元素来统一它(或者如果有必要传入 @987654324 @ 和
prefix,例如“.NAME”或“.VALUE”)。如果这只是一个简化的示例,您可能需要详细说明。如果您真的需要使用流,请尝试返回包含前 3 个元素的流,然后使用Stream.concat(first3, Stream.of(4th)).collect(....) -
这个例子相当简单。我正在处理已经存在的代码,因此希望继续使用流,并将两个流中相同的部分外包给另一种方法。我认为该方法返回一个可以在流中使用的字符串列表是最简单的。我不确定我是否在解释方面做得很好,但我会尝试使用您的建议,谢谢!
-
@Thomas:使用 Stream.concat 效果很好!谢谢!
-
第二种方法更改了参数名称,但没有更改对它的引用,这会破坏代码。抛开这种不必要的参数重命名,唯一真正的区别是
".NAME"已更改为".VALUE"。如果这确实是预期的唯一区别,请创建一个将该字符串作为参数的方法,从而重用 99% 的代码,而不仅仅是该内部部分。
标签: java list arraylist java-stream