是否有Java构建方式可以将2个整数组合成一个Set?

时间:2018-12-05 12:33:21

标签: java arraylist hashset

这是我的代码:

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,但是有点不客气。

1 个答案:

答案 0 :(得分:4)

您可以简单地通过以下方式进行操作:

Set<UniqueClassByTwoIntProperties> uniques = new HashSet<>(myList);

旁边:确保正确实现了对象的hashCodeequals,以使对象具有可比性。

如果您只想要List的唯一性,则可以将Stream.distinct用作:

List<UniqueClassByTwoIntProperties> uniques = myList.stream()
                                 .distinct() // for unique objects
                                 .collect(Collectors.toList());