【问题标题】:Avoiding unnamed lambda parameter [duplicate]避免未命名的 lambda 参数
【发布时间】:2020-04-01 19:46:05
【问题描述】:

我有一个应用程序需要管理一些项目的优先级队列,其中优先级本身实际上可以是小数(如 2.4 或 0.3)。与通常的整数优先级一样,越小越好。以下单行代码生成DoubleStreamDEFAULT_CAPACITY - 许多doubles 伪均匀分布在0SCALE 之间:

DoubleStream priorities = IntStream.range(0, DEFAULT_CAPACITY).map(_ -> r.nextDouble() * SCALE);

我的问题是:如何避免 lambda 中的未命名参数 _ 作为map 的参数?不幸的是,Random::nextDouble() 不是static,因此无法引用方法。

当然,这个问题概括了:缺少static 方法并且给定已知的迭代次数,我们如何避免不必要的未命名 lambda 参数?实际上,实际上不需要生成中间 Stream(调用 IntStream::range() 的结果)。

// 编辑:在仔细查看我的 IDE 之后,我注意到上面的语法实际上从 Java 9 开始就不可编译了!编译器说:从 Java 9 开始,'_' 是关键字,不能用作标识符。所以这个问题现在对我来说更加重要:)

【问题讨论】:

    标签: java lambda java-stream java-12


    【解决方案1】:

    假设您已经有一个Random r 对象:

    DoubleStream priorities = r.doubles(DEFAULT_CAPACITY, 0.0, SCALE);
    

    DoubleStream priorities = DoubleStream
        .generate(() -> r.nextDouble() * SCALE)
        .limit(DEFAULT_CAPACITY);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-26
      • 1970-01-01
      • 1970-01-01
      • 2016-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多