Удалить дубликаты кортежей из ArrayList- Java - PullRequest
0 голосов
/ 24 февраля 2020

Я хочу иметь уникальный список кортежей без дубликатов.

List <Tuple>  newNonZeros = new ArrayList<>(); 

и в newNonZeroes есть результат: [(0,2)(1,2)(1,2)(1,1)(2,2)(2,2)(2,1)]

Вот что я пробовал:

List <Tuple> newList = new ArrayList<>();
newList.add(newNonZeros.get(0));

for(int i=1; i < newNonZeros.size();i++){
    if(newNonZeros.get(i-1)!= newNonZeros.get(i)){
        newList.add(newNonZeros.get(i));
    }
}

Это не работает. Может кто-нибудь помочь мне ... это очень простая проблема

Я также попробовал следующий метод:

...newNonZeros.stream().distinct().collect(Collectors.toList());

1 Ответ

1 голос
/ 24 февраля 2020

Переопределить equals и hashCode в вашем Tuple классе:

@Override
public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;
    Tuple tuple = (Tuple) o;
    return first == tuple.first &&
            second == tuple.second;
}

@Override
public int hashCode() {
    return Objects.hash(first, second);
}

Тогда вы можете использовать:

List<Tuple> newList = newNonZeros.stream()
                               .distinct()
                               .collect(Collectors.toList());

Или с каждым для l oop:

List<Tuple> newList = new ArrayList<>();
for(Tuple tuple : newNonZeros) {
    if(!newList.contains(tuple)) {
        newList.add(tuple);
    }
}
...