【发布时间】:2020-04-01 19:46:05
【问题描述】:
我有一个应用程序需要管理一些项目的优先级队列,其中优先级本身实际上可以是小数(如 2.4 或 0.3)。与通常的整数优先级一样,越小越好。以下单行代码生成DoubleStream 和DEFAULT_CAPACITY - 许多doubles 伪均匀分布在0 和SCALE 之间:
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