Evitar parámetro lambda sin nombre

Jason:

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 DoubleStreamcon DEFAULT_CAPACITY- muchos doubles pseudo-uniformemente distribuida entre 0y 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 staticmé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 :)

John Kugelman:

Asumiendo que tiene un Random robjeto ya:

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

o

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

Supongo que te gusta

Origin http://10.200.1.11:23101/article/api/json?id=394571&siteId=1
Recomendado
Clasificación