java - 供供应商生成 IntStream 的 Lambda 表达式

标签 java lambda java-8 java-stream

如何用 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/

相关文章:

java - 有没有办法在 lambda 表达式中显式定义泛型参数类型?

java - Wicket ajax 调用不会呈现我的新组件

java - 验证 double 型是否包含 2 位小数的简单方法是什么?

java - Jsoup 发布 : Defining a selected option to return HTML?

java - 为什么数据字段应该是静态的和最终的

java - 如何使用 setProperty 设置不同的信任库 keystore

c# - IEnumerable.Any(Func) 什么时候返回值?

java8聚合对象转换器

java - 尝试打印 JAVA8 Collector 的结果时出现歧义错误

java - EBean (4.5.x) 是否支持映射 Java 8 的时间类型,例如 OffsetDateTime