esquerda:
Todos,
Eu tenho um objeto
public class Device {
public String getUserId() {
return userId;
}
public String getDeviceId() {
return deviceId;
}
}
Recebo toda a Lista de Valores
List<Device> uList = getList();
Na lista eu tenho um valores duplicados Baseado userId Agora eu quero obter a lista única que irá remover as duplicatas de userId
Como eu posso conseguir isso, eu sou muito novo para Java
shmosel:
A maneira mais simples é criar um Map
onde a chave é o userId
:
Map<String, Device> map = new HashMap<>();
devices.forEach(d -> map.put(d.getUserId(), d));
List<Device> uniques = new ArrayList<>(map.values());
Ou, usando correntes:
Map<String, Device> map = devices.stream()
.collect(Collectors.toMap(Device::getUserId, d -> d, (a, b) -> a));
List<Device> uniques = new ArrayList<>(map.values());
Alternativamente, você pode despejá-los em um TreeSet
com um comparador que verifica userId
:
Set<Device> set = new TreeSet<>(Comparator.comparing(Device::getUserId));
set.addAll(devices);
List<Device> uniques = new ArrayList<>(set);
Tudo isso pressupõe que você não está preocupado com discrepâncias nos deviceId
. Caso contrário, dê uma olhada Map.merge()
ou o correspondente Collectors.toMap()
sobrecarga.