如何用 lambda 表达式替换此处的 Supplier
代码
IntStream inStream = Stream.generate(new Supplier<Integer>() {
int x= 1;
@Override
public Integer get() {
return x++ ;
}
}).limit(10).mapToInt(t -> t.intValue());
inStream.forEach(System.out::println);
上面这段代码的输出是:
1
2
3
4
5
6
7
8
9
10
最佳答案
Stream::generate
不适合这个问题。根据文档:
This is suitable for generating constant streams, streams of random elements, etc.
您可能更想使用
IntStream::range
:IntStream intStream = IntStream.range(1, 11); intStream.forEach(System.out::println);
另一个解决方案可能是使用
IntStream.iterate
您可以使用IntUnaryOperator
舒适地控制增量:IntStream intStream = IntStream.iterate(1, i -> i+1).limit(10); intStream.forEach(System.out::println);
如前所述,
Stream::generate
适用于常量流或随机元素。随机元素可能是使用Random
类获得的,因此在这里您可能希望使用AtomicInteger
获得增量:AtomicInteger atomicInteger = new AtomicInteger(1); IntStream intStream = Stream.generate(atomicInteger::getAndIncrement).limit(10); intStream.forEach(System.out::println);
关于java - 供供应商生成 IntStream 的 Lambda 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53572114/