2017-10-09 2 views
1

J'ai une liste d'objets où je dois vérifier si des champs spécifiques des objets sont uniques.Vérifie si une propriété d'objet spécifique est unique dans la liste

public class SomeBean { 

    private String name; 
    private String value; 

} 

List<SomeBean> beans = ... 

donc je dois vérifier si tous les champs et tous valuename champs sont indépendamment uniques (toutes les valeurs sont uniques et tous les noms sont uniques). La solution évidente est d'obtenir la liste de List<String> names ... et List<String> values et de vérifier l'unicité séparément mais dans mon cas, ces listes pourraient être plutôt grandes. Et comme cette liste vient de l'extérieur, je n'ai pas pu changer la structure de données initiale.

Alors qu'est-ce que le moyen le plus efficace pour ce faire?

Merci.

+2

Les champs sont indépendamment uniques ou la combinaison est unique? – Yash

+0

Indépendamment. Mis à jour la question –

+0

À mon avis, vous devrez utiliser HashTable (s) pour être en mesure de vérifier cela. Si vous ne faites pas cela, vous vous retrouverez avec O (n^2) – Yash

Répondre

1

L'un des moyens possibles est d'utiliser la collecte TreeSet. Vous devez remplacer la méthode compareTo() pour éviter les éléments en double

0

La solution la plus simple pour supprimer des éléments en double consiste à charger vos éléments à Set car les valeurs en double définies pour Set n'ont pas été autorisées. Vous pouvez utiliser HashSet.

OU

Vous pouvez ajouter vos articles à HashMap<String, SomeBean> wher vous pouvez utiliser getName() + getValue() comme clé:

HashMap<String, SomeBean> myMap= new HashMap<>(); 
myMap.put(someBean.getName() + someBean.getValue(), bean); 
... 
+0

Je ne suis pas d'accord avec _vous devez remplacer les equals() et hashCode() de votre bean_ C'est plus simple que cela. –

+0

Je ne remplacerais pas 'equals' et' hashCode' du DTO uniquement pour pouvoir terminer cette tâche. Mais je suppose que je pourrais créer TreeSet avec un comparateur personnalisé. –