0
votes

Supprimer le duplicata d'une arrayliste personnalisée par paramètre

Je suis confronté à un problème que je n'arrive pas à résoudre:

J'ai lu une arrayliste à partir du téléphone: xxx

Je mets l'objet joueur à partir de chaque jeu dans un nouveau ArrayListe : xxx

Maintenant, ce que je voudrais, c'est de:

  • Ajouter Gamer dans un ArrayListe Si non déjà présent
  • Si présent, ajoutez ++ à un paramètre nommé Leadickpoints
  • Trier par point

    Il s'agit d'une activité de classement avec une arrayliste sur mesure , mais je n'arrive pas à le faire.

    Tout mon code: < Pré> xxx


1 commentaires

Pouvez-vous montrer la classe joueur


4 Réponses :


1
votes

Remplacement Equals and HashCode Méthodes de la classe d'objets de votre joueur.

puis avant d'ajouter de l'objet à ArrayList, vérifiez arraylist.Contains () , si oui, vous pouvez appeler arraylist.indexof () méthode pour obtenir cet instance d'objet dans ArrayList , incrémentez la valeur des noms de nom et appelez araylist.set () pour remettre l'instance à la même position.


0 commentaires

0
votes

Vous pouvez utiliser définir code> au lieu de ArrayList code> pour une valeur unique.

Remplacer le hashcode et la méthode égale p>

Set<Gamer> gamerNoDuplicate=new HashSet();
if (gameResult != null) {
    for (int i = 0; i < gameResult.size(); i++) {
        if(gamerNoDuplicate.contains(gameResult.get(i).getWinnerGamer()){
            Gamer alreadyExist = gamerNoDuplicate.indexOf(gameResult.get(i).getWinnerGamer());
            alreadyExist.setLeaderPoints(alreadyExist.getLeaderPoints()+ gameResult.get(i).getWinnerGamer().getLeaderPoints());
        }else{
            gamerNoDuplicate.add(gameResult.get(i).getWinnerGamer());
        }
    }
}


1 commentaires

Veillez bien! Mais j'ai eu une erreur sur indexof ... je ne sais pas pourquoi?



0
votes
writeRead.getArrayList(this).stream()
            .map(Game::getWinnerGamer)
            .collect(Collectors.groupingBy(Function.identity(), Collectors.summingInt(Gamer::getLeaderboardScore)))
            .entrySet()
            .stream()
            .sorted(Comparator.comparing(Map.Entry<Gamer, Integer>::getValue).reversed())
            .map(Map.Entry::getKey)
            .collect(Collectors.toList());

1 commentaires

Vous êtes les bienvenus :) Les flux nous aident à ne pas écrire de code redondant;)



0
votes

Finalement je l'ai fait comme ça:

et ça marche parfaitement Merci! P>

if (gameResult != null) {


        for (int i = 0; i < gameResult.size(); i++) {
            gamerList.add(gameResult.get(i).getWinnerGamer());
        }

        /* --------- */


        for (int i = 0; i < gamerList.size(); i++) {
            Gamer gamer = gamerList.get(i);
            gamer.setLeaderboardScore(1);
            boolean isInArray = false;

            if (!gamerNoDuplicate.isEmpty()) {
                for (int j = 0; j < gamerNoDuplicate.size(); j++) {
                    if (gamer.getName().equals(gamerNoDuplicate.get(j).getName())) {
                        gamerNoDuplicate.get(j).addLeaderscorePoint();
                        isInArray = true;
                    }
                }

                if (!isInArray) {
                    gamerNoDuplicate.add(gamer);
                }

            } else gamerNoDuplicate.add(gamer);
        }
    }


0 commentaires