Mir ist aufgefallen, dass die Implementierung von UniqueElementsValidator keine Sammlungsinstanz von Set verwendet, um zu prüfen, ob alle Elemente eindeutig sind.
public boolean isValid(Collection collection, ConstraintValidatorContext constraintValidatorContext) {
if ( collection == null || collection.size() < 2 ) { // why not use `collection instanceof Set`
return true;
}
List duplicates = findDuplicates( collection );
if ( duplicates.isEmpty() ) {
return true;
}
if ( constraintValidatorContext instanceof HibernateConstraintValidatorContext ) {
constraintValidatorContext.unwrap( HibernateConstraintValidatorContext.class )
.addMessageParameter( "duplicates", duplicates.stream().map( String::valueOf ).collect( Collectors.joining( ", " ) ) )
.withDynamicPayload( CollectionHelper.toImmutableList( duplicates ) );
}
return false;
}
Update
Es verwirrt mich, wenn die Sammlung festgelegt ist, dann ist das der Fall Es ist nicht erforderlich, die folgenden findDuplicates auszuführen, was die Leistung verbessern kann, es sei denn, die Verwendung von „instanceof“ ist teurer. Kann es jemand erklären?
Warum verwendet „UniqueElementsValidator“ nicht „Collection Instanceof Set“, um zu bestimmen, ob es doppelte Elemente en ⇐ Java
-
- Similar Topics
- Replies
- Views
- Last post