有没有办法缩短java中的for-each循环?

时间:2016-10-09 18:11:14

标签: java arrays foreach iteration

我想在java中迭代一半的数组。是否有任何优雅的方法来缩短它,例如使用for-each循环?

B

3 个答案:

答案 0 :(得分:4)

如果使用Java中asList类的Arrays方法将数组转换为列表,则可以使用forEach类中的List方法。 Java用一行打印出列表中的每个元素,

Arrays.asList(array).forEach(System.out::println);

要打印一半数组,我建议使用copyOfRange方法将数组的一半复制到一个新数组中,

Integer[] newArray = Arrays.copyOfRange(array, 0, array.length/2);
Arrays.asList(newArray).forEach(System.out::println);

编辑:像Marko Topolnik所指出的那样,我们实际上是从一组基本类型开始而不是对象类型,所以为了使用asList方法,我们将不得不使用int将数组转换为对象数组(从IntegerInteger[] integerArray = ArrayUtils.toObject(array);)。然而,这似乎是乏味/低效的,OP要求更短的方式,所以我的建议是使用Marko的方法,

Arrays.stream(array).limit(array.length/2).forEach(System.ou‌​t::println);

编辑2:像Amber Beriwal所指出的那样,应该注意的是,虽然上面的单行解决方案由于其简洁性看起来很漂亮,但与OP的原始相比仍然非常低效/慢方法。因此,我想重申Amber的评论,OP和其他人应该坚持原来的for-loop。

for (int i = 0; i < array.length/2; i++)
{
    System.out.println(array[i]);
}

答案 1 :(得分:1)

怎么样:

IntStream.range(0, array.length / 2).map(i -> array[i]).forEach(System.out::println);

一行,没有数组副本。

细分:

IntStream.range(0, array.length / 2)    //get the range of numbers 0 - (array length)/2
         .map(i -> array[i])            //map from index to value
         .forEach(System.out::println); //print result

答案 2 :(得分:0)

你发布的答案很好。虽然,我找不到更好的方法来使其保持紧凑,保持性能相同,但性能可以提高。编码时请记住以下做法:

  1. 算法的内存要求应该是最佳的
  2. 算法的时间即性能应该是最佳的
  3. 算法的复杂性不应该太多。在1&amp; 2,这可以跳过。
  4. 考虑1&amp; 2,代码行至少是优先考虑的。
  5. 解决方案1:此解决方案将比您的方法慢4-5倍,加Stream将占用更多空间。

    Arrays.stream(array).limit(array.length/2).forEach(System.ou‌​t::println);
    

    解决方案2 :此解决方案比上述代码和代码(基于我的测试)更快,但Stream会占用额外空间。而且,它不紧凑。

    Arrays.stream(array).limit(array.length / 2).forEach(new IntConsumer() {
        @Override
        public void accept(int value) {
            System.out.println(value);
        }
    });
    

    解决方案3:正如您所建议的那样。

    int[] array = new int[] { 0, 1, 2, 3, 4, 5 };
    int limit = array.length / 2;
    for (int i = 0; i < limit; i++) {
        System.out.println(array[i]);
    }
    

    建议:不要过去减少性能和内存丢失的LOC。最好跟上能够提供最佳性能的解决方案。