我需要一个收集器,它几乎与Collectors.toSet()
相同,但具有自定义的完成器。我希望能够像这样做:
myCollector = Collectors.toSet();
myCollector.setFinisher(myCustomFinisher);
完成这个任务似乎不可能。我唯一能想到的替代方案是使用
Collector.of()
重新创建一个类似于 Collectors.toSet()
的方法,但这并不太DRY。有没有一种方法可以采取现有的Collector并按上面所述进行修改?
编辑
其中一些答案建议像这样做:
Collector<T, ?, Set<T>> toSet = Collectors.toSet();
return Collector.of(
toSet.supplier(),
toSet.accumulator(),
toSet.combiner(),
yourFinisher,
toSet.characteristics());
然而,我的自定义处理器实际上并没有返回Set;它是使用积累的集合来返回其他内容。事实上,这导致了我陷入了泛型地狱中,我仍在努力理清混乱的代码。
Collectors
创建一个包装类,在其中实现setFinisher
。 - Brandon Laidig