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.
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); } }`
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()
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); } }
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 ) ; }
Ü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 ) { }
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!