Duplicata de Strings

TookieP

Bucheron
21 Octobre 2015
7
0
12
26
Salut tout le monde,
J'ai un problème sur une méthode que j'ai faites, la méthode est la suivante :

Ce que je voulais :
Ajouter des strings dans une string list sans duplicata, par exemple notre string list contient : "Salut, Bonjour, Bonsoir, A demain" et il ne faut pas qu'elle comportent X fois le même string

Ce que j'ai fais :

PHP:
String pathKits = "Players." + p.getName() + ".permissions.kits";
List<String> kitsPerms = plugin.getPlayersConfig().getStringList(pathKits);

private void countRandom(Integer next, List<String> kitsPerms) {
        HashSet<String> stringSet = new HashSet<String>();
        stringSet.clear();
        Random random = new Random();
        ArrayList<String> kitsA = new ArrayList<String>();
        for (Kit kit : Kit.values()) {
            if (!kitsA.contains(kit.name())) {
                kitsA.add(kit.name());
            }
        }

        for (int i = 0; i < next; i++) {
            if(!stringSet.contains(kitsA.get(random.nextInt(kitsA.size()))))
            stringSet.add(kitsA.get(random.nextInt(kitsA.size())));

        }
        for (String list : stringSet) {
            if(!kitsPerms.contains(list)) kitsPerms.add(list);
        }
       
        for(Player p: Bukkit.getOnlinePlayers())  {
            p.sendMessage("girardcome has " + kitsPerms.size() + " kits\nKits are: " + kitsPerms);
        }
    }


Ce que j'ai obtenu :

 

Detobel36

Créateur de plugins (PhoenixRebirth)
Support
17 Août 2012
10 531
24
2 247
347
28
Bruxelles - Belgique
www.phoenix-rebirth.fr
Salut,

Je comprend pas pourquoi tu te prend autant la tête ?
Pourquoi utiliser du random ?
Surtout que tu l'utilises mal...
"nextInt" renvoie un chiffre (en fonction des paramètres). Ce chiffre est différent à chaque appel. Donc:
PHP:
            if(!stringSet.contains(kitsA.get(random.nextInt(kitsA.size()))))
            stringSet.add(kitsA.get(random.nextInt(kitsA.size())));
La première fois, tu va peut être faire le test avec le kit 1 et au final c'est peut être le kit 2 que tu va mettre dans la liste. Donc ta condition c'est juste un random "vrai" ou "faux" complètement bidon.

Pour éviter d'avoir des doublons, tu peux simplement mettre tous les éléments de ta liste dans un HashSet.
PHP:
private void displayKits(List<String> kitsPerms) {
    final HashSet<String> stringSet = new HashSet<String>();
    stringSet.addAll(kitsPerms);
   
   
    for(final Player p: Bukkit.getOnlinePlayers())  {
        p.sendMessage("girardcome has " + kitsPerms.size() + " kits");
        p.sendMessage("Kits are: " + String.join(", ", stringSet));
    }
}
A noter que ce code n'a pas été testé. Il contient donc peut être des fautes de syntaxe mais niveau logique, tout est la.


Cordialement,
Detobel36