Kotlin FP: convertire Lista <string>in mappa</string>

Kotlin FP: convertire Lista in mappa

ho un Elenco di Stringa, voglio trasformarsi in una Mappa di occorrenze. (~ I valori della mappa sono il conteggio di molte volte che la stringa è stata ripetuta nella lista)

il modo imperativo, vorrei scrivere come il seguente

fun transformMap(list: List<String>): Map<String, Int> {
    val map = mutableMapOf<String,Int>()
    for(n in list){
        map.put(n,map.getOrDefault(n,0) + 1)
    }
    return map.toMap()
}

come scrivere questo in modo di programmazione funzionale?

in Java 8 +, questo sarà scritto in questo modo

String[] note;
Map<String, Integer> noteMap = Arrays.stream(note)
         .collect(groupingBy(Function.identity(),
          collectingAndThen(counting(), Long::intValue)));

EN From: Kotlin FP : Convert List to Map

More similar articles:

3 Comments

  1. è possibile utilizzare i flussi in Kotlin troppo. ma se si desidera evitare i flussi, è possibile utilizzare fold():

    val list = listOf("a", "b", "c", "a")
    val histogram = list.fold(mutableMapOf<String, Int>()) { map, s ->
        map[s] = map.getOrDefault(s, 0) + 1
        map
    }.toMap()
    
    println(histogram)
    1. la linea con la riassegnazione del valore della mappa può anche essere riscritta come map.merge(s, 1, Int::plus), che spesso si trova in soluzioni di problemi di programmazione competitive. :):)

  2. è possibile utilizzare Kotlin Grouping per farlo in una linea tramite l’estensione Iterable<T>.groupingBy:

    val myList = listOf("a", "b", "c", "a", "b", "a")
    val myMap = myList.groupingBy { it }.eachCount()
    
    println(myMap)
    // Prints {a=3, b=2, c=1}

Leave a Reply

Your email address will not be published. Required fields are marked *