【发布时间】:2017-01-02 14:11:03
【问题描述】:
对于 Java 8 Lambda/Closure,var-arg 方法签名是否有通用的最佳方法?
在将方法与单个对象作为参数或对象集合一起使用的情况下,我看到了三个选项来实现这一点:
private void optionOneVararg(String... params) { ... }
private void optionTwoCollection(Collection<String> params) { ... }
private void optionThreeStream(Stream<String> params) { ... }
显然是用String类作为例子。
对此是否有普遍有效的“最佳实践”方法? vararg 方法生成了 Java 7 之前最流畅的代码。使用流时感觉很笨拙。
我希望能够在方法内部和调用它的外部使用 lambda 的便利性。此外,我想将包装/胶水代码(例如Collections.singletonList(element) 或Arrays.asList(element))保持在最低限度,并避免使用Collection myCollection = stream.collect(...),后跟myCollection.stream()。
【问题讨论】:
-
您不喜欢 vararg 选项的哪些方面?
-
关于 var-args 主题,您可能想看看 this question。
-
@assylias 当我对流使用操作(例如过滤器),然后将结果传递给我的函数,然后对该参数使用更多流操作时,可变参数数组需要收集之前的第一个流它可以交给函数。
-
为什么不用不同的参数选项重载方法呢?就像 Java API 中的许多方法一样?
标签: java lambda java-8 java-stream