【问题标题】:Java 8: Reverse an int array in one line (using Streams API) [duplicate]Java 8:在一行中反转一个 int 数组(使用 Streams API)[重复]
【发布时间】:2018-04-08 16:47:48
【问题描述】:

我正在尝试解决 challenge 问题,这需要您在 Java 中反转 int 数组。问题是你只能得到一个;,所以我假设你需要使用 Streams API 来做到这一点。

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

  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();
  }

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

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

但是,由于Collections.reversedOrder() 强制集合中元素的自然排序反向,如果数组由数字 1 到 5 组成,无论如何数组中元素的顺序是,它总是返回{5, 4, 3, 2, 1}

有一个Comparator.reversed() 方法,但它需要在现有的比较器上调用。我不确定该怎么做,或者这是否可行。

还有其他方法吗?

【问题讨论】:

  • 提示:IntStream.iterate 创建反向序列。

标签: java arrays java-stream reverse


【解决方案1】:

您可以通过反转索引流来做到这一点:

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

【讨论】:

  • 与副本中的解决方案相同。 (不反对,只是评论)
  • 我想要来自 LINQ 的 Reverse() 方法。
猜你喜欢
  • 1970-01-01
  • 2014-07-26
  • 1970-01-01
  • 2017-08-25
  • 2020-07-03
  • 2013-03-15
  • 2018-05-10
  • 1970-01-01
  • 2017-04-27
相关资源
最近更新 更多