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

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

王林
王林avant
2024-02-13 23:57:08558parcourir

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);
        }
    }`

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);
    }
}

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 ) ;  
}

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 ) { }

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer