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

请帮助我理解Arrays.sort()中"->"的用法[复制]

耿敏达
2023-03-14

我在Geeksforgeks中解决问题,突然发现了这个问题。我理解“Integer.compare”的用法,但无法理解“Integer.compare”的用法-

static void sortBySetBitCount(Integer arr[], int n)
{ 
    Arrays.sort(arr, (a, b) -> Integer.compare(countSetBit(b), countSetBit(a)));
         //I mean here the "->" operator
} 

static int countSetBit(int n) {
    int count = 0;
    while (n>0) {
        n = n & (n - 1);
        count += 1;
    }
    return count;
}

共有2个答案

司徒经纶
2023-03-14

这是Java 8中引入的新lambda表达式语法的一部分。有两个在线教程可以帮助您了解其中的诀窍,即Lambda表达式文档API链接。

它基本上是一个符号-

使用lambda表达式的一般语法是

(参数)-

参数用括号括起来,这与方法的方式相同,lambda表达式体是用大括号括起来的代码块。

沃阳飙
2023-03-14

Lambda表达式添加在Java8中,并提供以下功能。

允许将功能视为方法参数,或将代码视为数据。

可以创建而不属于任何类的函数。

lambda表达式可以像对象一样传递并按需执行。

语法:

lambda operator -> body

其中lambda运算符可以是:

零参数:

() -> System.out.println("Zero parameter lambda");

一个参数:–

(p) -> System.out.println("One parameter: " + p);

如果可以从上下文中推断出变量的类型,则不强制使用括号

多个参数:

<代码>(p1、p2)-

以上示例的来源GeeksForGeeks。

import java.util.*;

class MainClass{
    public static void main(String ... $){
        var out = System.out;
        Integer arr[] = {10, 32, 31};
        sortBySetBitCount(arr);
        //output is 31, 10, 32
        //31 has 5 set bits
        //10 has 3 set bits
        //32 has 1 set bit
        out.println(Arrays.asList(arr));

    }
    static void sortBySetBitCount(Integer arr[]){ 
        //first argument is array they we want to sort
        //second argument is a lambda method
        Arrays.sort(arr, (a, b) -> Integer.compare(countSetBit(b), countSetBit(a)));
    } 
    //Returns numbers of bit set
    static int countSetBit(int n) {
        int count = 0;
        while (n != 0) {
            n = n & (n - 1);
            count += 1;
        }
        return count;
    }
}
$ javac MainClass.java && java MainClass 
[31, 10, 32]

有关lambda方法的详细信息:

java中的Lambda方法

 类似资料:
  • 我在GeeksforGeeks解决问题,突然得到了这个。我理解“Integer.compare”的用法,但无法理解“-

  • 问题内容: 我具有以下实体结构:业务->广告活动->促销,其中一个业务可以有多个广告活动,一个业务可以具有多个促销。一对多关系都声明为LAZY。在我的代码中的一个地方,我需要从业务部门急切地获取两个集合,所以我这样做: 但是,查询返回的结果列表中包含4个业务对象,所有4个对象都引用同一个业务实例。在我的数据库中,该公司下有3个广告活动,而这3个广告活动下都有3个广告活动。 我有两个问题: 首先,我

  • 本文向大家介绍深入理解java中Arrays.sort()的用法,包括了深入理解java中Arrays.sort()的用法的使用技巧和注意事项,需要的朋友参考一下 Java的Arrays类中有一个sort()方法,该方法是Arrays类的静态方法,在需要对数组进行排序时,非常的好用。 但是sort()的参数有好几种,基本上是大同小异,下面是以int型数组为例的Arrays.sort()的典型用法

  • 这里的任务是,我得到输入字符串,例如树,并根据频率排序,输出应该是,因为e重复2次和t, r频率是1. 我有这个代码,什么是它遍历字符串,把所有字符在字符串中的Hashmap与他们的频率和优先级队列用于排序他们降序,之后的结果是采取在字符串生成器, 但我需要一些帮助来理解优先级队列参数中使用的lambda函数。这是我的功能。 有人能用函数中的“树”来解释流程吗

  • 我目前正在做一个项目,我们必须从UML图制作代码。我了解UML类图的解剖结构,但我无法理解什么

  • 我是扑翼开发的新手。当我运行Android Studio的第一个程序时: 我只是有点小毛病: null > 尝试:使用--stacktrace选项运行以获取堆栈跟踪。使用--info或--debug选项运行以获取更多日志输出。使用--scan运行以获得完整的见解。 请访问https://help.gradle.org获取更多帮助 生成失败,%1s异常:Gradle task assembleDeb