1

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

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

我的问题是:如何避免_lambda 中作为参数给出的未命名参数map?不幸的是,Random::nextDouble()is not static,所以方法引用是不可能的。

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

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

4

1 回答 1

2

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

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

或者

DoubleStream priorities = DoubleStream
    .generate(() -> r.nextDouble() * SCALE)
    .limit(DEFAULT_CAPACITY);
于 2020-04-01T20:07:25.067 回答