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)......
| 归档时间: |
|
| 查看次数: |
160 次 |
| 最近记录: |