草庐IT

java - Collectors.toSet 实现细节

我正在查看jdk-8下的Collectors.toSet实现并且几乎看到了显而易见的事情:publicstaticCollector>toSet(){returnnewCollectorImpl((Supplier>)HashSet::new,Set::add,(left,right)->{left.addAll(right);returnleft;},//combinerCH_UNORDERED_ID);看一下组合器;这之前已经讨论过here,但想法是组合器从第二个参数折叠到第一个参数。这显然发生在这里。但后来我查看了jdk-9实现并看到了这个:publicstaticCollect

java - 扩展现有的流收集器实例

我需要一个与Collectors.toSet()几乎相同的收集器,但具有自定义的整理器。我很想能够做这样的事情:myCollector=Collectors.toSet();myCollector.setFinisher(myCustomFinisher);然后完成,但这似乎不可能。我能看到的唯一替代方案是它基本上使用Collector.of()重新创建Collectors.toSet(),这不是很干。有没有办法采用现有的收集器并如上所述对其进行修改?编辑一些答案​​推荐了这样的东西:Collector>toSet=Collectors.toSet();returnCollector.

java - Collectors.toSet() 是否总是返回 HashSet ?什么是契约(Contract)?

Javadoc说ReturnsaCollectorthataccumulatestheinputelementsintoanewSet.Therearenoguaranteesonthetype,mutability,serializability,orthread-safetyoftheSetreturned;ifmorecontroloverthereturnedSetisrequired,usetoCollection(java.util.function.Supplier).所以Collectors.toCollection(HashSet::new)似乎是避免这里出现问题的好

mongodb - 如何使用日期字段添加ToSet

我在Mongoose中有以下模型:varRelationSchema=newSchema({user:{type:ObjectId,ref:'users'},type:String,remarks:String,createdOn:{type:Date,default:Date.now}},{_id:false});varUserRelationSchema=newSchema({user:{type:ObjectId,ref:'users'},relations:[RelationSchema]});varUserRelation=mongoose.model('user_relat

java - Java 的 Collectors.toSet() 是否保证允许空值?

Set接口(interface)不promise实现是否允许null元素。每个实现都应该在其文档中声明这一点。Collectors.toSet()promise返回Set的实现,但明确“不保证返回的Set的类型、可变性、可序列化性或线程安全性”。没有提到空安全。OpenJDK中Collectors.toSet()的当前实现始终使用HashSet,它允许空元素,但这在未来可能会改变,其他实现可能会有所不同.如果Set实现禁止null元素,它会在不同时间抛出NullPointerException,特别是在尝试add(null)时.看起来如果Collectors.toSet()决定使用nu

java - 是否值得将 distinct() 与 collect(toSet()) 一起使用

将流的元素收集到集合中时,在流上指定.distinct()是否有任何优点(或缺点)?例如:returnitems.stream().map(...).distinct().collect(toSet());鉴于该集合已经删除了重复项,这似乎是多余的,但它是否提供了任何性能优势或劣势?答案是否取决于流是并行/顺序还是有序/无序? 最佳答案 根据javadoc,distinct是一个有状态的中间操作。如果您确实有.distinct紧跟.collect,它实际上并没有增加任何好处。也许如果.distinct实现比Set重复检查更高效,你可

java - Collectors.toSet() 和 HashSet

取下面一行示例代码:SetsomeSet=someColletion.stream().map(p->p.toString()).collect(Collectors.toSet());我想要一个HashSet。对代码进行调试,我确实得到了一个HashSet。我查看了java.util.stream.Collectors.toSet()以观察以下代码:publicstaticCollector>toSet(){returnnewCollectorImpl((Supplier>)HashSet::new,Set::add,(left,right)->{left.addAll(right)