在 ruby 中你可以做这样的事情
a = ["a", "b", "c"]
a.cycle {|x| puts x } # print, a, b, c, a, b, c,.. forever.
a.cycle(2) {|x| puts x } # print, a, b, c, a, b, c.
这真是太美了。
Java 8 中最接近的模拟是这样的:
Stream<Integer> iterator = Stream.iterate(new int[] {0, 0}, p -> new int[]{p[0] + 1, (p[0] + 1) % 2}).map(el -> el[1]);
Iterator<Integer> iter = iterator.iterator();
System.out.println(iter.next());//0
System.out.println(iter.next());//1
System.out.println(iter.next());//0
System.out.println(iter.next());//1
有没有更好的方法和更惯用的方法在 Java 中做到这一点?
更新
只想在这里概述最接近我的问题的解决方案是
IntStream.generate(() -> max).flatMap(i -> IntStream.range(0, i))
感谢@Hogler
最佳答案
您可以使用
String[] array = { "a", "b", "c" };
Stream.generate(() -> array).flatMap(Arrays::stream).forEach(System.out::println);
打印
a
b
c
永远和String[] array = { "a", "b", "c" };
Stream.generate(() -> array).limit(2).flatMap(Arrays::stream).forEach(System.out::println);
打印
a
b
c
两次。这甚至不需要现有数组:
Stream.generate(() -> null)
.flatMap(x -> Stream.of("a", "b", "c"))
.forEach(System.out::println);
分别
Stream.generate(() -> null).limit(2)
.flatMap(x -> Stream.of("a", "b", "c"))
.forEach(System.out::println);
你也可以使用
IntStream.range(0, 2).boxed()
.flatMap(x -> Stream.of("a", "b", "c"))
.forEach(System.out::println);
关于java-8 - 在 Java 8 中创建循环和无限范围整数的最惯用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49283335/