扩展现有的流收集器实例

Roy*_*ove 6 java java-8 java-stream

我需要一个几乎Collectors.toSet()与之相同的收集器,但需要一个定制的装订器.我希望能够做到这样的事情:

myCollector = Collectors.toSet();
myCollector.setFinisher(myCustomFinisher);
Run Code Online (Sandbox Code Playgroud)

并且完成,但这似乎不可能.我能看到的唯一选择是它本质上是重新Collectors.toSet()使用Collector.of(),这不是很干.

有没有办法采取现有的收集器并如上所述进行修改?

编辑

一些答案推荐如下:

  Collector<T, ?, Set<T>> toSet = Collectors.toSet();
  return Collector.of(
     toSet.supplier(),
     toSet.accumulator(),
     toSet.combiner(),
     yourFinisher,
     toSet.characteristics());
Run Code Online (Sandbox Code Playgroud)

但是我的自定义修整器实际上并没有返回Set; 它使用累积的集合来返回其他内容.它正在这样做的事实让我进入了Generics地狱,我仍在翻阅它.

Hol*_*ger 11

这正是做什么的collectingAndThen(collector,finisher).

自定义修整器不会替换旧的修整器(如果有的话),但会与它结合(例如oldFinisher.andThen(newFinisher)),但是当前的实现toSet()还没有修整器(身份修整器).

所以你要做的就是collectingAndThen(toSet(),myCustomFinisher)......