在Java中,如何在不改变整数顺序的情况下找到整数组的顺序?

在Java中,如何在不改变整数顺序的情况下找到整数组的顺序?,java,arrays,sorting,Java,Arrays,Sorting,我试图找出一组未定义数量的整数的顺序 例如,它可以是{30,60,10100,20,50110},但是我不想对它们进行排序,我想用它们的顺序来更改它们(或创建一个新数组) 例如,前面给出的数组将变成{3,5,1,6,2,4,7}。这是因为30是数组中的第一个数字,也是数组中第三个最小的数字。60是第五个最小的,等等。因此我有了新的数字升序,而不改变它们在数组中的位置。我不知道这有多可读和高效,但我想尝试这样做。它从范围[0,numbers.length-1]创建一个整数流,并使用这些数字作为原始

我试图找出一组未定义数量的整数的顺序

例如,它可以是{30,60,10100,20,50110},但是我不想对它们进行排序,我想用它们的顺序来更改它们(或创建一个新数组)


例如,前面给出的数组将变成{3,5,1,6,2,4,7}。这是因为30是数组中的第一个数字,也是数组中第三个最小的数字。60是第五个最小的,等等。因此我有了新的数字升序,而不改变它们在数组中的位置。

我不知道这有多可读和高效,但我想尝试这样做。它从范围
[0,numbers.length-1]
创建一个整数流,并使用这些数字作为原始数组的索引对它们进行排序。它在最后添加1,以获得从1开始的范围

int[] numbers = {30, 60, 10, 100, 20, 50, 110};
int[] order = IntStream.range(0, numbers.length).boxed()
        .sorted(Comparator.comparingInt(e -> numbers[e]))
        .mapToInt(e -> e + 1).toArray();
System.out.println(Arrays.toString(order)); // [3, 5, 1, 6, 2, 4, 7]
你必须把它们分类。 如果不对事物进行分类,你就无法找到事物的顺序


只需复制并排序。

如何将
30
变成
3
110
变成
6
?逻辑是什么?产生这个结果的操作是什么?如果数字不是唯一的怎么办?{10,10,10}应该返回什么?{1,1,1}或其他什么?请详细说明您的问题。原始数组和新数组之间的关系不清楚。数字的升序不改变它们在数组中的位置,这显然不可能用于您的测试用例。那么,您尝试了什么?我建议使用两个数组,一个原始数组和一个排序数组。这很聪明!您可以稍微简化:
.sorted(Comparator.comparingit(i->number[i]))
。啊,是的,谢谢您的建议。我将编辑答案。@radulfr非常感谢您!这是完美的,正是我所需要的。我真的很感激。再次感谢。