有没有Java方法来编写像“Python的下划线for循环”这样的代码?

时间:2017-02-06 01:51:49

标签: java python loops for-loop

我刚刚看到一篇关于Python循环的帖子:Trying to understand Python loop using underscore and input

有一种方法可以在没有“变量名”的情况下在python中循环:

for _ in range(10):
    print("Hello world")

Java方法:

for (int _ = 0; _ < 10; _++) {
    System.out.println("Hello world");
}

eclipse警告我:

  

'_'不应该用作标识符,因为它是保留的   来自源代码级1.8的关键字。

也许我应该坚持i并写下

for (int i = 0; i < 10; i++) {
    System.out.println("Hello world");
}

使用(可能)不必要的整数变量。

还有另一种方法来编写简单的java循环,比如python循环,可能更优雅吗?

4 个答案:

答案 0 :(得分:4)

没有更高效或更优雅(IMO)的方式来表达Java中的循环。

然而:

  • Python中_的假设效率很可能是一种错觉。
  • Java中未使用的变量的低效率可能是一种错觉。 JIT编译器应该优化掉对变量没有贡献的任何赋值。
  • println调用相比,我们讨论的是微小开销,以及导致这些问题的所有内容。

还有一点。标识符_在Java 8中是合法的,但它是一种明显的样式违规。在Java 9中,(我认为)它们将使它成为语法错误!!

答案 1 :(得分:1)

在Java 8+中,您可以使用IntStream之类的内容,例如

IntStream.range(0, 10).forEach(i -> System.out.println("Hello, World"));

答案 2 :(得分:0)

根据帖子及其答案,&#39; _&#39;在一个python循环中是一个&#34;一次性&#34;变量,这意味着该值在循环中不重要/使用。

我认为你的java循环与你的python循环相同,&#39; _&#39;或者&#39;我&#39;并没有带来任何差异。

答案 3 :(得分:0)

也许辅助函数会做

IntConsumer c(Runnable f) {
    return ($) -> f.run();
}

并使用

运行代码
IntStream.range(0, 10).forEach(c(() -> System.out.println("hi")));

下行是,对于每种类型的消费者,您需要具有帮助函数,因为这不起作用,因为IntConsumer不是函数:

private <T1, T2> Function<T1, T2> c(Runnable f) {
    return ($) -> { f.run(); return null; }
}