son - ¿Cómo crear un mapa con la API de flujo de Java usando un valor fuera del flujo?
libreria io java (3)
Como ya se dijo en las otras respuestas, debe especificar una función que asigne cada elemento al valor fijo como element -> samePrice
.
Como adición, si desea rellenar específicamente un ConcurrentHashMap
, hay una característica interesante que no necesita una operación de transmisión en absoluto:
ConcurrentHashMap<String,BigDecimal> map = new ConcurrentHashMap<>();
map.keySet(samePrice).addAll(set);
Desafortunadamente, no existe tal operación para los Map
arbitrarios.
Quiero iniciar un Map<String, BigDecimal>
y quiero poner siempre el mismo valor BigDecimal
desde fuera de la secuencia.
BigDecimal samePrice;
Set<String> set;
set.stream().collect(Collectors.toMap(Function.identity(), samePrice));
Sin embargo Java se queja de la siguiente manera:
El método toMap (Function, Function) en el tipo Collectors no es aplicable para los argumentos (Function, BigDecimal)
¿Por qué no puedo usar el BigDecimal desde fuera? Si escribo:
set.stream().collect(Collectors.toMap(Function.identity(), new BigDecimal()));
Funcionaría, pero eso no es, por supuesto, lo que quiero.
El segundo argumento (como el primero) de toMap(keyMapper, valueMapper)
es una función que toma el elemento de flujo y devuelve el valor del mapa.
En este caso, debes ignorarlo para que puedas tener:
set.stream().collect(Collectors.toMap(Function.identity(), e -> samePrice));
Tenga en cuenta que su segundo intento no funcionaría por la misma razón.
Collectors#toMap
espera dos Functions
set.stream().collect(Collectors.toMap(Function.identity(), x -> samePrice));
Puedes encontrar casi el mismo ejemplo en el JavaDoc
Map<Student, Double> studentToGPA students.stream().collect(toMap(Functions.identity(), student -> computeGPA(student)));