Tengo una aplicación que necesita para gestionar una cola de prioridad de algunos artículos, en los que las prioridades mismos pueden ser en realidad cantidades fraccionarias (como 2.4 o 0.3). Más pequeño es mejor, como con las prioridades enteros habituales. La siguiente de una sola línea genera una DoubleStream
con DEFAULT_CAPACITY
- muchos double
s pseudo-uniformemente distribuida entre 0
y SCALE
:
DoubleStream priorities = IntStream.range(0, DEFAULT_CAPACITY).map(_ -> r.nextDouble() * SCALE);
Mi pregunta es: ¿cómo puedo evitar que el parámetro no identificado _
en el lambda que se da como argumento para map
? Por desgracia, Random::nextDouble()
no es static
, por lo que un método de referencia no es posible.
Esta pregunta se generaliza, por supuesto: que carece de un static
método y dado un número conocido de iteraciones, ¿cómo podemos evitar un parámetro lambda no identificado innecesaria? Efectivamente, la generación de un producto intermedio Stream
(el resultado de la llamada IntStream::range()
), realmente debería no ser necesario.
// Editar: Después de mirar en mi IDE un poco más cerca, estoy Tomando nota de que la sintaxis anterior es en realidad NO compilables desde Java 9! El compilador dice: A partir de Java 9, '_' es una palabra clave, y no puede ser utilizada como un identificador . Por lo que esta cuestión es aún más importante para mí ahora :)
Asumiendo que tiene un Random r
objeto ya:
DoubleStream priorities = r.doubles(DEFAULT_CAPACITY, 0.0, SCALE);
o
DoubleStream priorities = DoubleStream
.generate(() -> r.nextDouble() * SCALE)
.limit(DEFAULT_CAPACITY);