Estoy tratando de reducir el grado de escritura de Scala (2.8) como Java. Aquí hay una simplificación de un problema que encontré. ¿Puede sugerir mejoras en mis soluciones que son "más funcionales"?Scala, hacer que mi ciclo sea más funcional
Transformar el mapa
val inputMap = mutable.LinkedHashMap(1->'a',2->'a',3->'b',4->'z',5->'c')
descartando cualquier datos con el valor de 'z' y la indexación de los personajes a medida que se encuentran
En primer lugar tratar
var outputMap = new mutable.HashMap[Char,Int]()
var counter = 0
for(kvp <- inputMap){
val character = kvp._2
if(character !='z' && !outputMap.contains(character)){
outputMap += (character -> counter)
counter += 1
}
}
segundo intento (no mucho mejor , pero usa un mapa inmutable y un 'foreach')
var outputMap = new immutable.HashMap[Char,Int]()
var counter = 0
inputMap.foreach{
case(number,character) => {
if(character !='z' && !outputMap.contains(character)){
outputMap2 += (character -> counter)
counter += 1
}
}
}
La solución más agradable es agradable! Cumple todos los requisitos de forma compacta y comprensible. (Personalmente, haría un mapa antes de filtrar, pero ese es un detalle casi trivial.) –