这是我的代码:
private class UniqueClassByTwoIntProperties {
private final int propertyOne;
private final int propertyTwo;
UniqueCase(final int propertyOne, final int propertyTwo) {
this.propertyOne= propertyOne;
this.propertyTwo= propertyTwo;
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (this == obj) {
return true;
}
if (!(obj instanceof UniqueCase)) {
return false;
}
UniqueClassByTwoIntProperties unique = (UniqueClassByTwoIntProperties) obj;
return unique.claimApplicationId == claimApplicationId && unique.claimCoverageId == claimCoverageId;
}
@Override
public int hashCode() {
return Objects.hash(propertyOne, propertyTwo);
}
}
我正在遍历带有对象的列表,我想通过以下方式在其中获取唯一性:
myList.stream()
.map(row -> new UniqueClassByTwoIntProperties(row.getOne(), row.getTwo()))
.collect(Collectors.toSet());
我想知道Java中是否有内置的类/方法。我研究过字典和MultiMapValues,但是有点不客气。
答案 0 :(得分:4)
您可以简单地通过以下方式进行操作:
Set<UniqueClassByTwoIntProperties> uniques = new HashSet<>(myList);
旁边:确保正确实现了对象的hashCode
和equals
,以使对象具有可比性。
如果您只想要List
的唯一性,则可以将Stream.distinct
用作:
List<UniqueClassByTwoIntProperties> uniques = myList.stream()
.distinct() // for unique objects
.collect(Collectors.toList());