Heim > Java > Zeichenfolgenlängen sortieren, jedoch umgekehrt (längste Zeichenfolge zuerst)

Zeichenfolgenlängen sortieren, jedoch umgekehrt (längste Zeichenfolge zuerst)

王林
Freigeben: 2024-02-13 23:57:08
nach vorne
584 Leute haben es durchsucht

Der PHP-Editor Strawberry bietet Ihnen ein interessantes Problem beim Sortieren von Zeichenfolgen: Sortieren von Zeichenfolgenlängen, jedoch umgekehrt. Das heißt, die längste Zeichenfolge kommt zuerst. Dieses Problem kann durch die Verwendung integrierter Funktionen und benutzerdefinierter Sortierfunktionen gelöst werden. Während des Sortiervorgangs müssen wir die Länge jeder Zeichenfolge berechnen und sie in der Reihenfolge von der größten zur kleinsten Länge sortieren. Als nächstes werden wir detailliert beschreiben, wie dieses interessante Problem der Zeichenfolgensortierung implementiert wird.

Frageninhalt

Ich musste eine Übung machen, bei der ich eine Methode orderquestionsbylength() schreiben musste, die die Fragen nach ihrer Länge (absteigende Reihenfolge) sortieren sollte

Der folgende Code funktioniert (sortiert aber nicht in absteigender Reihenfolge):

`public void orderQuestionsByLength(){
        Collections.sort(questions,Comparator.comparing(question -> question.getText().length())); 
        for (Question question : questions){                                                       
            System.out.println(question);
        }
    }`
Nach dem Login kopieren

Sobald ich .reversed() hinzufüge, gibt meine Idee einen Fehler aus Die Methode „gettext“ kann in „object“ nicht aufgelöst werden Obwohl ich eine Methode gettext() habe und diese vor dem Hinzufügen von .reversed() funktioniert

Das macht mich verrückt, weil ich nicht weiß, wie ich dieses Problem lösen soll, und gpt sagt, mein Code sei korrekt (nicht, dass ich mich auf gpt verlassen sollte, aber ich habe eine andere Möglichkeit, ganze Zahlen in absteigender Reihenfolge zu sortieren, und ich verwende „There is no problem“) mit return()

Problemumgehung

Manchmal passiert dies, weil die Methode comparator.comparing den Typ des Lambda-Parameters nicht korrekt ableiten kann, wenn sie mit .reversed() verkettet ist

Um dieses Problem zu lösen, können Sie explizite Typinformationen im Lambda-Ausdruck bereitstellen. So verwenden Sie die (string question) -> … 修改 orderquestionsbylength-Methode.

public void orderquestionsbylength() {
    collections.sort(questions, comparator.comparing((question question) -> question.gettext().length()).reversed()); 
    for (question question : questions) {                                                       
        system.out.println(question);
    }
}
Nach dem Login kopieren

Anrufe comparator#reversed.

Achten Sie auf die Grammatik. Verwenden Sie in comparator.comparing 生成比较器后调用 reversed.

  • comparator.comparing 是一个 static Methodenaufruf zum Generieren einer Instanz (Objekt).
  • comparator#reversed ist ein Instanzmethodenaufruf, der ein anderes Objekt generiert.

Wie in der Antwort von chf erwähnt, müssen Sie möglicherweise den Datentyp des an das Lambda übergebenen Parameters explizit angeben: ( 字符串问题 ) -> ….

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 ) ;  
}
Nach dem Login kopieren

Übrigens können Sie wie oben gezeigt eine collections#foreach 和方法引用来折叠 for-Schleife verwenden.

Vollständiger Beispielanwendungscode:

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 ) { }
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonZeichenfolgenlängen sortieren, jedoch umgekehrt (längste Zeichenfolge zuerst). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage