Java 8:在一行中反转一个int数组(使用Streams API)

时间:2017-10-27 06:41:02

标签: java arrays java-stream reverse

我正在尝试解决challenge,它要求您在Java中反转;数组。问题是你只得到一个 public static int[] reverse(int[] a) { List<Integer> numbers = IntStream.of(a).boxed().collect(Collectors.toList()); Collections.reverse(numbers); return numbers.stream().mapToInt(i -> i).toArray(); } ,所以我假设你需要使用Streams API来做到这一点。

我尝试了传统方式,它正确地反转了数组,但没有通过一个分号测试 -

public static int[] reverse(int[] a) {
    return Arrays.stream(a).boxed()
     .sorted(Comparator.reverseOrder())
     .mapToInt(i -> i).toArray();
  }

接下来,我尝试使用Collections.reversedOrder() -

Collections.reversedOrder()

但是,由于{5, 4, 3, 2, 1}会对集合中元素的自然排序进行反向,因此如果数组由数字1到5组成,则不会无论数组中元素的顺序是什么,它总是返回static void printInteger(object i) { Console.Write(i + " "); }

有一个Comparator.reversed()方法,但需要在现有的Comparator上调用它。我不知道该怎么做,或者甚至可以这样做。

还有其他办法吗?

1 个答案:

答案 0 :(得分:0)

您可以通过反转索引流来完成此操作:

return IntStream.range(0, a.length)
        .map(i -> a[a.length - 1 - i])
        .toArray();