如何按相反的顺序对 IntStream 进行排序

2022-09-02 03:33:20

我正在使用从.txt文件中读取数字。我想颠倒这种蒸汽中元素的顺序,以便当它们被收集时,它们将从最高到最低排列。我不想在数组构建后进行排序,因为我不知道其中可能有多少个元素,我只需要最高的N个元素。BufferedReader

in = new BufferedReader(reader);
                int[] arr = in.lines()
                        .mapToInt(Integer::parseInt)
                        .sorted()
                        .limit((long) N)
                        .toArray();

答案 1

尝试在排序前否定这些值,在排序后否定(恢复正常):

in = new BufferedReader(reader);
int[] arr = in.lines()
              .mapToInt(Integer::parseInt)
              .map(i -> -i).sorted().map(i -> -i)
              .limit((long) N)
              .toArray();

答案 2

因为反向顺序不是自然顺序,所以不能用于以反向顺序排序。如果避免使用 ,则使用 a,则可以使用 a 以自然顺序的相反顺序对流进行排序。然后,您可以在最后调用并转换为。sorted()IntStreamStream<Integer>Collections.reverseOrder()mapToIntint[]

int[] arr = in.lines()
            .map(Integer::valueOf)  // Extract Integer, not int
            .sorted(Collections.reverseOrder())  // On Stream<Integer>
            .limit(N)
            .mapToInt(i -> i)       // map Integer to int
            .toArray();

推荐