java - 对数组进行排序后获取元素的排名

标签 java algorithm sorting lambda java-8

给定一个数组,我想找到这些元素在数组的排序版本中的位置。因此,输入和输出如下所示

Input : {10, 5, 4, 9, 8, 3, 2, 1,  6, 7}
Output: {0, 3, 4, 9, 8, 1, 2, 5, 6, 7}

这意味着,10 将位于排序数组中的第 0 个位置,而 5 将位于第四个索引,即排序输入[3]。

这是一个单行代码,可以做到这一点

Arrays.sort(index, (a, b) -> (nums[b] - nums[a]));

该方法如下所示

public Integer[] findIndexInSortedArray(int[] nums) {
        Integer[] index = new Integer[nums.length];

        for (int i = 0; i < nums.length; i++) {
            index[i] = i;
        }

        Arrays.sort(index, (a, b) -> (nums[b] - nums[a]));

        return index;
}

有没有一种方法可以完成与上面相同的操作,而不使用 lambda 和 Java 8 的任何功能?仅使用比较器是否可以实现此目的?

最佳答案

lambda 表达式始终可以被它实现的函数接口(interface)替换(在您的例子中为 Comparator<Integer> )。只是需要更长的时间来写:

Arrays.sort(index, new Comparator<Integer> () {
                       public int compare (Integer a, Integer b) {
                           return Integer.compare(nums[b],nums[a]);
                       }
            });

关于java - 对数组进行排序后获取元素的排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42971566/

相关文章:

java - 为什么我在使用 Mapreduce 时得到了一个困惑的结果

java - 在Java中连接2个字符串的方法

java - BPMN 中信号事件和消息事件可以互换吗?

数组上的Javascript编程

algorithm - 是否有仅返回正值的线性同余生成器算法?

python - 为相同的字典值创建可交换元组键的最佳方法是什么?

java - 以速度转义美元符号

python - append() 算法错误地追加

excel - PyQt : How to sort QTableView columns(strings and numericals)

mysql_query 使用 WHERE=$var 排序