いいえ、使用することになっているソリューションを正確に見つけました。
であってもTreeSet
、互換性のない比較基準を使用することは嫌われequals
ています。
ソートされたセットが Set インターフェースを正しく実装するためには、(明示的なコンパレータが提供されているかどうかに関係なく) ソートされたセットによって維持される順序付けが equals と一致している必要があることに注意してください。
Apache Commons については知りませんが、Guava Equivalenceを使用して目的を達成することはできますが、Guava はこの種のリクエストを具体的に 拒否しました。
Equivalence<T> equivalence = new Equivalence<T>() {
@Override
protected boolean doEquivalent(T a, T b) {
return CustomComparator.equals(a, b);
}
@Override
protected int doHash(T item) {
return CustomHashCodeGenerator.hashCode(item);
}
};
List<T> items = getItems();
Set<Equivalence.Wrapper<T>> setWithWrappedObjects = items.stream()
.map(item -> equivalence.wrap(item))
.collect(Collectors.toSet());