我必须做一个练习,我必须编写一个方法 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,但我有另一种方法,我对整数进行降序排序,我使用了反转( )没有任何问题
有时会发生这种情况,因为 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);
}
}
致电
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.
}