Есть ли какая-либо сборка в Java, чтобы сделать набор из комбинации из 2-х целых? - PullRequest
0 голосов
/ 05 декабря 2018

Это мой код:

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 голосов
/ 05 декабря 2018

Вы можете просто сделать это следующим образом:

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

В стороне : убедитесь, что hashCode и equals объектов реализованы правильно, чтобы объект был сопоставим.

Если вы просто хотите List уникальных символов, вы можете использовать Stream.distinct как:

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