避免未命名的 lambda 参数

Avoiding unnamed lambda parameter

我有一个应用程序需要管理某些项目的优先级队列,其中优先级本身实际上可以是小数(例如 2.4 或 0.3)。与通常的整数优先级一样,越小越好。下面的单行生成一个 DoubleStreamDEFAULT_CAPACITY - 许多 double 伪均匀分布在 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 开始,'_' 是关键字,不能用作标识符。所以这个问题现在对我来说更加重要:)

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

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

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