[JAVA] Générer une collection unique de valeurs à partir d'une collection qui contient des valeurs en double

Aperçu

Il s'agit d'un exemple de code qui renvoie une collection unique de valeurs en numérotant en série les valeurs dupliquées d'une collection avec des valeurs en double comme indiqué ci-dessous.

List<String> list = Arrays.asList("a", "b", "c", "a", "b", "b", "d", "a", "b");

Notez que les valeurs qui ne se chevauchent pas (ou la première valeur) ne reçoivent pas de numéro de série, et lorsqu'elles sont dupliquées, un numéro de série après 2 est ajouté. Par exemple

a, a, b, c, c, c

Est

a, a_2, b, c, c_2, c_3

Faire.

Exemple de code

public static class UniqueValue {
    private Map<String, Integer> cache = new HashMap<>();

    String get(String name, Integer idx) {
        String tmp;
        if (idx > 1) {
            tmp = name + "_" + idx.toString();
        } else {
            tmp = name;
        }
        if (!cache.containsKey(tmp)) {
            cache.put(tmp, idx);
            return tmp;
        }
        //S'il y a des doublons, ajoutez des numéros de série et se reproduit
        return get(name, idx + 1);
    }

    void dump() {
        cache.entrySet().forEach(e -> {
            System.out.println("dump: key=[" + e.getKey() + "] i=[" + e.getValue() + "]");
        });
    }
}

Exécuter

List<String> list = Arrays.asList("a", "b", "c", "a", "b", "b", "d", "a", "b");

UniqueValue un = new UniqueValue();
Set<String> unique = list.stream()
    .sorted()
    .map(name -> un.get(name, 1))
    .collect(Collectors.toSet());

unique.forEach(System.out::println);
// → a
// → b
// → c
// → a_3
// → b_2
// → d
// → a_2
// → b_4
// → b_3

un.dump();
// → dump: key=[a] i=[1]
// → dump: key=[b] i=[1]
// → dump: key=[c] i=[1]
// → dump: key=[a_3] i=[3]
// → dump: key=[b_2] i=[2]
// → dump: key=[d] i=[1]
// → dump: key=[a_2] i=[2]
// → dump: key=[b_4] i=[4]
// → dump: key=[b_3] i=[3]

Recommended Posts

Générer une collection unique de valeurs à partir d'une collection qui contient des valeurs en double
Collection RSpec que j'ai fréquemment utilisée
Une collection de commandes fréquemment utilisées dans heroku
Une collection de raccourcis Eclipse que les nouveaux diplômés trouvent utiles
Une collection de phrases qui impressionne le "sentiment différent" de Java et de JavaScript
[Rails] Une collection de conseils qui sont immédiatement utiles pour améliorer les performances
Importance de l'interface apprise de la collection Java
Un programme qui calcule la puissance de 2 à 100
Trouvez la différence à partir d'un multiple de 10
C'est juste maintenant, mais une collection de commandes qui apparaissent fréquemment dans Rails