import java.util.*;
import java.lang.*;
import java.io.*;
class Ideone {
public static void main
(String[] args
) { List
<Conta
> contas
= Arrays.
asList( new Conta("123", "4"),
new Conta("567", "8"),
new Conta("123", "4"),
new Conta("999", "0"),
new Conta("567", "8")
);
// Set elimina as duplicações, e LinkedHashSet garante a mesma ordem do original
Set<Conta> set = new LinkedHashSet<>(contas);
// se quiser transformar em lista
List<Conta> contasSemDuplicacao = new ArrayList<>(set);
System.
out.
println(contasSemDuplicacao
); }
}
class Conta {
// duas contas são iguais se têm o mesmo número e dígito verificador
@Override
public boolean equals
(Object obj
) { if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final Conta other = (Conta) obj;
if (!Objects.equals(this.numero, other.numero)) {
return false;
}
return Objects.equals(this.dv, other.dv);
}
// Se implementou equals, precisa também do hashCode
@Override
public int hashCode() {
return Objects.hash(this.numero, this.dv);
}
this.numero = numero;
this.dv = dv;
}
@Override
return "Conta{" + "numero=" + numero + ", dv=" + dv + '}';
}
}
aW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgpjbGFzcyBJZGVvbmUgewogICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgIExpc3Q8Q29udGE+IGNvbnRhcyA9IEFycmF5cy5hc0xpc3QoCiAgICAgICAgICAgICAgICBuZXcgQ29udGEoIjEyMyIsICI0IiksCiAgICAgICAgICAgICAgICBuZXcgQ29udGEoIjU2NyIsICI4IiksCiAgICAgICAgICAgICAgICBuZXcgQ29udGEoIjEyMyIsICI0IiksCiAgICAgICAgICAgICAgICBuZXcgQ29udGEoIjk5OSIsICIwIiksCiAgICAgICAgICAgICAgICBuZXcgQ29udGEoIjU2NyIsICI4IikKICAgICAgICApOwogICAgICAgIAogICAgICAgIC8vIFNldCBlbGltaW5hIGFzIGR1cGxpY2HDp8O1ZXMsIGUgTGlua2VkSGFzaFNldCBnYXJhbnRlIGEgbWVzbWEgb3JkZW0gZG8gb3JpZ2luYWwKICAgICAgICBTZXQ8Q29udGE+IHNldCA9IG5ldyBMaW5rZWRIYXNoU2V0PD4oY29udGFzKTsKICAgICAgICAvLyBzZSBxdWlzZXIgdHJhbnNmb3JtYXIgZW0gbGlzdGEKICAgICAgICBMaXN0PENvbnRhPiBjb250YXNTZW1EdXBsaWNhY2FvID0gbmV3IEFycmF5TGlzdDw+KHNldCk7CiAgICAgICAgCiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGNvbnRhc1NlbUR1cGxpY2FjYW8pOwogICAgfQp9CgpjbGFzcyBDb250YSB7CiAKICAgIHByaXZhdGUgU3RyaW5nIG51bWVybywgZHY7CgogICAgLy8gZHVhcyBjb250YXMgc8OjbyBpZ3VhaXMgc2UgdMOqbSBvIG1lc21vIG7Dum1lcm8gZSBkw61naXRvIHZlcmlmaWNhZG9yCiAgICBAT3ZlcnJpZGUKICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3Qgb2JqKSB7CiAgICAgICAgaWYgKHRoaXMgPT0gb2JqKSB7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICBpZiAob2JqID09IG51bGwpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICBpZiAoZ2V0Q2xhc3MoKSAhPSBvYmouZ2V0Q2xhc3MoKSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIGZpbmFsIENvbnRhIG90aGVyID0gKENvbnRhKSBvYmo7CiAgICAgICAgaWYgKCFPYmplY3RzLmVxdWFscyh0aGlzLm51bWVybywgb3RoZXIubnVtZXJvKSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIHJldHVybiBPYmplY3RzLmVxdWFscyh0aGlzLmR2LCBvdGhlci5kdik7CiAgICB9CgogICAgLy8gU2UgaW1wbGVtZW50b3UgZXF1YWxzLCBwcmVjaXNhIHRhbWLDqW0gZG8gaGFzaENvZGUKICAgIEBPdmVycmlkZQogICAgcHVibGljIGludCBoYXNoQ29kZSgpIHsKICAgICAgICByZXR1cm4gT2JqZWN0cy5oYXNoKHRoaXMubnVtZXJvLCB0aGlzLmR2KTsKICAgIH0KCiAgICBwdWJsaWMgQ29udGEoU3RyaW5nIG51bWVybywgU3RyaW5nIGR2KSB7CiAgICAgICAgdGhpcy5udW1lcm8gPSBudW1lcm87CiAgICAgICAgdGhpcy5kdiA9IGR2OwogICAgfQoKICAgIEBPdmVycmlkZQogICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKICAgICAgICByZXR1cm4gIkNvbnRheyIgKyAibnVtZXJvPSIgKyBudW1lcm8gKyAiLCBkdj0iICsgZHYgKyAnfSc7CiAgICB9Cn0K