IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

Collections.sort et list Java


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2021
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2021
    Messages : 1
    Par défaut Collections.sort et list Java
    Bonjour,
    J'essaie de créer un jeux de Yahtzee en java, je dois vérifier si dans ma liste de face j'ai 3 faces identique pour savoir si j'ai un brelan. DiceResult est une classe que j'ai crée qui fait une liste des valeurs des dé une fois lancé, donc une liste de int.
    J'ai fait import java.util.Collections; pour ensuite trié ma liste avec Collections.sort() mais ca ne fonctionnement pas, j'ai une erreur sur la ligne où je trie.
    voici ma methode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public int score(DiceResult result) {
        int sum = 0;
        Collections.sort(result);
        for (int i=0; i<3; i++) {
           if ((result.get(i) == result.get(i+1)) && (result.get(i+1)== result.get(i+2)))
             sum = result.get(i)+result.get(i+1)+result.get(i+2);
        }
       return sum;
    }
    l'erreur me dit :

    no suitable method found for sort(DiceResult)
        Collections.sort(result);
                   ^
        method Collections.<T#1>sort(List<T#1>) is not applicable
          (cannot infer type-variable(s) T#1
            (argument mismatch; DiceResult cannot be converted to List<T#1>))
        method Collections.<T#2>sort(List<T#2>,Comparator<? super T#2>) is not applicable
          (cannot infer type-variable(s) T#2
            (actual and formal argument lists differ in length))
      where T#1,T#2 are type-variables:
        T#1 extends Comparable<? super T#1> declared in method <T#1>sort(List<T#1>)
        T#2 extends Object declared in method <T#2>sort(List<T#2>,Comparator<? super T#2>)

    Quelqu'un peut m'aider ?

  2. #2
    Membre émérite Avatar de Cincinnatus
    Homme Profil pro
    Développeur d'applications métier
    Inscrit en
    Mars 2007
    Messages
    593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur d'applications métier
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2007
    Messages : 593
    Par défaut
    Bonjour,

    L'objet dans la collection qui est triée doit implémenter l'interface Comparable. Une méthode compareTo( ) doit être définie pour indiquer l'ordre entre deux objets.

    cf
    https://jmdoudoux.developpez.com/cou...ollections.php

    https://mkyong.com/java/java-object-...nd-comparator/ paragraphe "3. Sort an Object with Comparable"
    L'auteur obtient d'abord la même erreur puis utilise l'interface Comparable.

  3. #3
    Membre Expert

    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    974
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 974
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    List<Integer> listInt = Arrays.asList(6,1, 3, 4, 5, 3, 2, 2, 4, 5,5);   //occurrences des lancers de dés
     
    Map<Integer,Integer> mapRes =  listInt.stream().collect(Collectors.toMap(k-> k, v->1,Integer::sum));  // génération d'une Map <valeur du dé, nb d'occurrences>
     
    OptionalInt sumOpt = mapRes.entrySet().stream().filter(s-> s.getValue() == 3).mapToInt(s-> s.getKey()*3).findFirst();  //recherche d'un brelan et calcul de la somme 3 * la valeur. Utilisation d'un Optional si pas de brelan dans le tirage
     
    sumOpt.ifPresent(System.out::println); //affichage de la somme si un brelan est trouvé
    avec la liste:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    	    listInt = Arrays.asList(6,1, 3, 4, 5, 3, 2, 2, 4, 5,5);
    cela affiche :

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 20/11/2018, 19h19
  2. Faire un triecoissant avec java sans utiliser Collections.sort
    Par IBKAM dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 08/10/2018, 19h30
  3. Trier une liste avec Collections.sort(liste)
    Par nakry dans le forum Collection et Stream
    Réponses: 18
    Dernier message: 25/09/2013, 15h52
  4. java.util.Collections.sort() je n'y comprends rien
    Par cmako dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 17/09/2007, 14h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo