2 votes

bibliothèque java org.immutables : insertion de tous les doublons dans la carte

J'utilise le bibliothèque d'immutables java .

@Value.Immutable 
public interface Foo {
    Map<Integer, String> getBar(); 
}

ImmutableFoo.builder().putBar(1, "asdf").putBar(1, "ghjk").build() provoque une erreur de duplication de clé. Existe-t-il un moyen d'éviter cela ?

  • Si je tombe sur la même clé avec une valeur différente, je voudrais remplacer l'ancienne valeur par la nouvelle.
  • Si je tombe sur le même clé avec la même valeur, j'aimerais l'ignorer.

2voto

Ievgen Lukash Points 343

Le générateur fait intentionnellement cela pour éviter (en fait, détecter rapidement) les erreurs de frappe et de copier-coller accidentelles. En cela, il imite en fait le comportement de la fonction ImmutableMap.Builder (qui est en fait utilisé en interne et est responsable de cette erreur).

Pour résoudre votre problème, la meilleure façon de procéder est de créer votre propre carte de hachage, de la remplir avec des valeurs dans n'importe quel ordre et avec n'importe quel nombre d'entrées dupliquées/supprimées, puis d'utiliser builder.putAllBar(hashMap) pour l'appliquer et la transformer en carte immuable pendant la création de l'objet de valeur.

L'autre option est de ne pas utiliser Guava, le code généré utilisera alors le code ordinaire HashMap et créera une copie défensive emballée dans Collection.unmodifiableMap pour l'objet immuable. Utilisez @Value.Style(jdkOnly = true) pour utiliser uniquement les collections fournies par le JDK (pour en savoir plus sur les styles, cliquez ici : http://immutables.github.io/style.html ). En utilisant une carte de hachage régulière dans un constructeur, vous éviterez l'erreur de clé dupliquée.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X