当前位置: 首页 > 知识库问答 >
问题:

java:带有lambda表达式的Arrays.sort()

卫沈义
2023-03-14

我想使用Arrays.sort方法按长度对数组中的字符串元素进行排序。我在这里被告知,可以使用lambda表达式而不是创建实现比较器的新类。用完全相同的方式做了,但它不起作用。

import java.util.Arrays;
import java.util.Comparator;

public class MainClass {
public static void main(String[] args)
{

    String[] months = {"January","February","March","April","May","June","July","August","September","October","December"};

    System.out.println(Arrays.toString(months)); //printing before


    //neither this works:
    Arrays.sort(months, 
            (a, b) -> Integer.signum(a.length() - b.length())   
    );

    //nor this:
    Arrays.sort(months, 
            (String a, String b) -> { return Integer.signum(a.length() - b.length()) }; 
    );


    System.out.println(Arrays.toString(months)); //printing after
}
}

共有3个答案

鲁烨熠
2023-03-14

您正在寻找的功能是Java8,它尚未发布。如果您想等待,或者如果没有,可以下载beta版,它计划在几个月后发布。

阚英睿
2023-03-14

你正在寻找这个:

Arrays.sort(months, (a, b) -> Integer.signum(a.length() - b.length()));
孙京
2023-03-14

最干净的方法是:

Arrays.sort(months, Comparator.comparingInt(String::length));

或者,使用静态导入:

Arrays.sort(months, comparingInt(String::length));

然而,这也可以工作,但是更加冗长:

Arrays.sort(months,
            (String a, String b) -> a.length() - b.length());

或更短:

Arrays.sort(months, (a, b) -> a.length() - b.length());

最后你的最后一个:

Arrays.sort(months, 
    (String a, String b) -> { return Integer.signum(a.length() - b.length()) }; 
);

具有<代码> 放错位置-应该是:

Arrays.sort(months, 
    (String a, String b) -> { return Integer.signum(a.length() - b.length()); }
);
 类似资料:
  • 问题内容: 我想使用方法按长度对数组中的字符串元素进行排序。我在这里被告知,可以使用lambda表达式来代替创建实现Comparator的新类。这样做完全一样,但是没有用。 问题答案: 最干净的方法是: 或者,使用静态导入: 但是,这也可以工作,但更详细: 或更短: 最后是您的最后一个: 有错位的-它应该是:

  • 问题内容: Java8中添加了Lambda表达式。我想理解为什么这很重要。对于尚未接触函数式编程习惯的Java程序员意味着什么?这是否意味着我可以编写出性能更好的代码或可大规模扩展的代码,还是只会使代码的详细程度降低。或全部。 问题答案: Oracle已经提供了有关该主题的教程。它列出了几个很好的用例。 在找到链接之前,我要说的是lambda表达式可让您将“函数”传递给代码。因此,您可以更轻松地编

  • 主要内容:函数式接口Lambda 表达式(Lambda expression)是一个匿名函数,基于数学中的λ演算得名,也可称为 闭包(Closure)。现在很多语言都支持 Lambda 表达式,如 C++、 C#、 Java、 Python 和 JavaScript 等。 Lambda 表达式是推动 Java 8 发布的重要新特性,它允许把函数作为一个方法的参数(函数作为参数传递进方法中),下面通过例 1 来理解 L

  • 我在第42和43行出现错误:,未处理的异常类型InterruptedException。如果我尝试quickfix,它将创建带有catch异常的try catch,它将具有相同的错误,并将尝试以相同的方式修复它,继续用try catch包围它。

  • 假设我在DB的表格中有以下记录。 这里的Emplid和date组合是我的主键。每次更改我都会保存记录的版本。(在最后3行中,共有3个版本作为数量变化)。 现在我想获取最新版本的记录,其中emplid=1111 date=28-02-2019(用户不知道数据库中有多少版本)。 我怎么能用lambda表达式呢。 这会给我vesrion 1。但是我怎样才能得到最新的版本呢。

  • 问题内容: 我低于要求: Employee.java 谓词.java 现在,我的目标是使用class中定义的方法测试要传递给的 年龄 是否成年,为此,我要传递在类的构造函数中传递的方法引用。 但是我不知道如何调用在类中定义的方法,下面是我的测试类:- 我在课程中收到编译错误。 让我知道如何解决此问题。以及是否需要提供其他信息。 问题答案: 谓词接口具有方法。您应该通过以下方式使用此方法: 此方法根