这个问题在这里已经有答案了:
将流收集回相同的收集类型(3个答案)
上个月关门了。
我一直在试图找到一种方法来编写泛型函数(可能不使用泛型)来Map集合。
假设我有一个a到b的函数,我想写一个取a的函数 Collection<A>
返回一个 Collection<B>
. 注意,a和b不是泛型,只是表示一般模式的一种方式。
到目前为止我所知道的是
public static Collection<Point> points2dToPoints(Collection<Point2D> points) {
return points.stream()
.map(Utils::point2dToPoint)
.collect(Collectors.toCollection(() -> points));
}
但是,在 .collect
,因为很明显我希望新的收藏 Collection<Point>
但我不知道如何找到一个供应商?
编辑:我希望能够以一种通用的方式使用这个函数:如果我传递一个集合,我得到一个集合作为回报,但是如果我传递一个列表,我得到一个列表作为回报。有可能这样做吗?
2条答案
按热度按时间v440hwme1#
替换语句
Collectors.toCollection(() -> points)
与Collectors.toList()
.演示:
输出:
xmd2e60i2#
最好的选择是不要过于复杂,只需:
返回接口的具体实现
Collection
(例如。,Collectors.toList()
)在隐藏实现细节的同时,(例如Collection
在方法签名中)。但是,您可以通过传递给您的方法使其更通用——如
Supplier
--接口的具体实现是什么Collection
你想要它回来,即这样你就可以通过混凝土
Collection
将返回的实现,例如: