避免未命名的 lambda 参数
Avoiding unnamed lambda parameter
我有一个应用程序需要管理某些项目的优先级队列,其中优先级本身实际上可以是小数(例如 2.4 或 0.3)。与通常的整数优先级一样,越小越好。下面的单行生成一个 DoubleStream
和 DEFAULT_CAPACITY
- 许多 double
伪均匀分布在 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 开始,'_' 是关键字,不能用作标识符。所以这个问题现在对我来说更加重要:)
假设您已经有一个 Random r
对象:
DoubleStream priorities = r.doubles(DEFAULT_CAPACITY, 0.0, SCALE);
或
DoubleStream priorities = DoubleStream
.generate(() -> r.nextDouble() * SCALE)
.limit(DEFAULT_CAPACITY);
我有一个应用程序需要管理某些项目的优先级队列,其中优先级本身实际上可以是小数(例如 2.4 或 0.3)。与通常的整数优先级一样,越小越好。下面的单行生成一个 DoubleStream
和 DEFAULT_CAPACITY
- 许多 double
伪均匀分布在 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 开始,'_' 是关键字,不能用作标识符。所以这个问题现在对我来说更加重要:)
假设您已经有一个 Random r
对象:
DoubleStream priorities = r.doubles(DEFAULT_CAPACITY, 0.0, SCALE);
或
DoubleStream priorities = DoubleStream
.generate(() -> r.nextDouble() * SCALE)
.limit(DEFAULT_CAPACITY);