Bon d'abord j'ai pensé que ce serait assez simple. Mais je ne peux pas penser à un moyen efficace de résoudre cela. Je pensais que c'était une façon brute de résoudre ça, mais ce n'est pas très élégant. J'ai une ArrayList. Contacts est une classe VO qui a plusieurs membres - nom, régions, id. ArrayList contient des doublons car différentes régions apparaissent plusieurs fois. La liste est triée par ID. Voici un exemple:Supprimer les doublons d'une ArrayList triée tout en conservant certains éléments des doublons
Entrée 0 - Nom: John Smith; Région: N; ID: 1
Entrée 1 - Nom: John Smith; Région: MW; ID: 1
Entrée 2 - Nom: John Smith; Les régions; ID: 1
Entrée 3 - Nom: Jane Doe; Région: NULL ID: 2
Entrée 4 - Nom: Jack Black; Région: N; ID: 3
Entrée 6 - Nom: Jack Black; Région: MW; ID: 3
Entrée 7 - Nom: Joe Don; Région: NE; ID: 4
Je veux transformer la liste ci-dessous en combinant des régions dupliquées ensemble pour le même ID. Par conséquent, la liste finale devrait avoir seulement 4 éléments distincts avec les régions combinées.
Ainsi, la sortie devrait ressembler à ceci: -
Entrée 0 - Nom: John Smith; Région: N, MW, S; ID: 1
Entrée 1 - Nom: Jane Doe; Région: NULL ID: 2
Entrée 2 - Nom: Jack Black; Région: N, MW; ID: 3
Entrée 3 - Nom: Joe Don; Région: NE; ID: 4
Que pensez-vous de la manière optimale de résoudre ce problème? Je ne cherche pas de code réel, mais des idées ou des conseils pour trouver le meilleur moyen de le faire.
Merci pour votre temps !!!
'TreeMap' répond' containsKey' dans 'O (log N)'. Cette solution est 'O (N log N)' et n'est donc pas optimale. – polygenelubricants
optimal est un concept assez nébuleux. L'OP pourrait simplement utiliser un HashMap, mais s'il s'agit d'un très gros ensemble de données, le code ci-dessus est une très bonne solution. Une optimisation consisterait à ne pas utiliser l'appel de contains() - appelez simplement get() et construisez new si get() renvoie null. L'utilisation de SortedMap ici n'aide pas vraiment, cependant - n'importe quelle implémentation de carte fonctionnerait. –
Il voulait que la sortie soit triée, si l'entrée est également triée, vous pouvez la résoudre en O (N) en l'itérant et en n'attendant que des fusions dans des entrées consécutives. Je me suis dit qu'il traitait déjà un O (N log N) lors du tri préliminaire de la liste d'entrée ou du tri de la liste de sortie afin que ma solution essaie de résoudre à la fois la fusion et le tri en une fois. –