对字符串长度进行排序,但相反(最长的字符串在前)

问题描述 投票:0回答:2

我必须做一个练习,我必须编写一个方法 orderQuestionsByLength(),它应该按问题的长度(降序)对问题进行排序

以下代码有效(但未按降序排序):

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

一旦我添加 .reversed(),我的 IDE 就会抛出错误 无法解析“Object”中的方法“getText” 即使我有一个方法 getText() 并且它在添加 .reversed() 之前就起作用了

这让我发疯,因为我不知道如何解决这个问题,gpt说我的代码是正确的(并不是说我应该依赖gpt,但我有另一种方法,我对整数进行降序排序,我使用了反转( )没有任何问题

java sorting compare reverse
2个回答
0
投票

有时会发生这种情况,因为 Comparator.comparing 方法在与 .reversed() 链接时无法正确推断 lambda 参数的类型。

要解决此问题,您可以在 lambda 表达式中提供显式类型信息。以下是您可以修改 orderQuestionsByLength 方法来执行此操作的方法:

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

0
投票

致电

Comparator#reversed

注意语法。使用

reversed
生成比较器后,调用 Comparator.comparing
after

  • Comparator.comparing
    是一个
    static
    方法调用,生成一个实例(对象)。
  • Comparator#reversed
    是实例方法调用,生成另一个对象。
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 ) ;  // Debug. 
}
© www.soinside.com 2019 - 2024. All rights reserved.