Maison > Java > le corps du texte

Trier les longueurs de chaîne, mais à l'envers (la chaîne la plus longue en premier)

王林
Libérer: 2024-02-13 23:57:08
avant
541 Les gens l'ont consulté

PHP Editor Strawberry vous propose un problème intéressant de tri de chaînes : trier les longueurs de chaînes, mais à l'envers. Autrement dit, la chaîne la plus longue vient en premier. Ce problème peut être résolu en utilisant des fonctions intégrées et des fonctions de tri personnalisées. Pendant le processus de tri, nous devons calculer la longueur de chaque chaîne et la trier de la plus grande à la plus petite. Ensuite, nous détaillerons comment implémenter ce problème intéressant de tri de chaînes.

Contenu des questions

J'ai dû faire un exercice où je devais écrire une méthode orderquestionsbylength() qui devait trier les questions par leur longueur (ordre décroissant)

Le code suivant fonctionne (mais ne trie pas par ordre décroissant) :

`public void orderQuestionsByLength(){
        Collections.sort(questions,Comparator.comparing(question -> question.getText().length())); 
        for (Question question : questions){                                                       
            System.out.println(question);
        }
    }`
Copier après la connexion

Dès que j'ajoute .reversed(), mon idée génère une erreur Impossible de résoudre la méthode 'gettext' dans 'object' Même si j'ai une méthode gettext() et qu'elle fonctionne avant d'ajouter .reversed()

Cela me rend fou parce que je ne sais pas comment résoudre ce problème et gpt dit que mon code est correct (pas que je devrais me fier à gpt mais j'ai une autre façon de trier les entiers par ordre décroissant et j'utilise Il n'y a rien de mal with return()

Solution de contournement

Parfois, cela se produit parce que la méthode comparator.comparing ne peut pas déduire correctement le type du paramètre lambda lorsqu'elle est enchaînée avec .reversed()

Pour résoudre ce problème, vous pouvez fournir des informations de type explicites dans l'expression lambda. Voici comment utiliser la méthode (string question) -> … 修改 orderquestionsbylength.

public void orderquestionsbylength() {
    collections.sort(questions, comparator.comparing((question question) -> question.gettext().length()).reversed()); 
    for (question question : questions) {                                                       
        system.out.println(question);
    }
}
Copier après la connexion

appelle comparator#reversed.

Faites attention à la grammaire. Utilisez dans comparator.comparing 生成比较器后调用 reversed.

  • comparator.comparing 是一个 static Appel de méthode pour générer une instance (objet).
  • comparator#reversed est un appel de méthode d'instance qui génère un autre objet.

Comme indiqué dans la réponse de chf , vous devrez peut-être être explicite sur le type de données du paramètre transmis au lambda : ( 字符串问题 ) -> ….

public void orderquestionsbylength()
{
    collections.sort( 
        questions, 
        comparator
            .comparing( ( string question ) -> question.gettext().length() )  // static method call. 
            .reversed()  // instance method call. 
    ); 
    questions.foreach( system.out :: println ) ;  
}
Copier après la connexion

Au fait, vous pouvez utiliser une boucle collections#foreach 和方法引用来折叠 for comme indiqué ci-dessus.

Exemple complet de code d'application :

package work.basil.example;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;

public class Infer
{
    public static void main ( String[] args )
    {
        Comparator < Question > comparator =
                Comparator
                        .comparing ( ( Question question ) -> question.text ( ).length ( ) )
                        .reversed ( );

        ArrayList < Question > questions =
                new ArrayList <> (
                        List.of (
                                new Question ( "alpha" , 1 ) ,
                                new Question ( "b" , 2 ) ,
                                new Question ( "gamma" , 3 )
                        )
                );
        questions.sort ( comparator );
        questions.forEach ( System.out :: println );
    }
}

record Question( String text , int points ) { }
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!