我有以下情况:
//Case 1
final Set<String> first = A.stream().filter().map().collect()
//Case 2
final Set<String> second = B.stream().filter().map().collect()
正如您所看到的,我将两次调用相同的lambda表达式但使用不同的“consumer”(A
或B
)。有没有解决方案来避免这种重复?
答案 0 :(得分:5)
定义一种方法,如果您在调用方法时不介意调用Collection
,则采用相应类型的Stream
(或parameter.stream()
}:
Set<String> reuse(Collection<SomeType> collection) {
return collection.stream().filter().map().collect();
}
然后调用:
final Set<String> first = reuse(A);
final Set<String> second = reuse(B);
答案 1 :(得分:5)
首先:示例代码中有没有 lambdas。
您只显示两个链式方法调用,最终创建Set
。
从这个意义上讲,给出示例代码的仅是有意义的:放置 common 部分
return someCollection.stream().filter().map().collect()
成小帮手方法。也许比Andy概述的要复杂得多 - 因为我希望你所谈论的 lambdas 实际上被用作调用filter()
和map()
的参数。在这种情况下,您可以创建辅助方法的那些参数。
但是就我避免代码重复而言 - 你应该只在底层&#34;语义&#34;时创建这样一个帮助方法。这两个用例真的相同。
答案 2 :(得分:-1)
您可以使用Predicate
作为类型。
Predicate<String> someFilter = e -> e == e; // or something more smart
并像
一样使用它A.stream().filter(someFilter);