[Stream] Esercizio

di il
4 risposte

[Stream] Esercizio

Scrivere un metodo che prende in pasto una lista di stringhe e ritorna una mappa le cui chiavi sono le stringhe racchiuse tra apici e i valori sono le lunghezze delle stringhe.
Es:

stringToMap(Arrays.asList("Verso l'infinito ed oltre".split(" ")))

restituisce : {'Verso'=5, 'l'infinto'=8, 'ed'=2, 'oltre'=5}
Sia con gli stream che senza stream.

Non voglio la soluzione, solo qualche strategia per cominciare.

Ciao e buon week end

4 Risposte

  • Re: [Stream] Esercizio

    Penso di avercela già fatta:
    
    lst.stream().map(i-> "'"+i+"'").collect(Collectors.toMap(i->i, String::length))
    

    Gli stream sono un'innovazione geniale di Java 8.
  • Re: [Stream] Esercizio

    Paolovox ha scritto:


    
    lst.stream().map(i-> "'"+i+"'").collect(Collectors.toMap(i->i, String::length))
    
    Ma così includi nella lunghezza anche gli apici .... non è come nell'esempio.
  • Re: [Stream] Esercizio

    Giusto

    Così funziona:
    
    public static Map<String, Integer> string2map(List<String> lst){
    		
    		return lst.stream().collect(Collectors.toMap(i->"'"+i+"'", String::length));
    		
    	}
    
    Una cosa che non riesco a capire è il perchè nel metodo:
    
    toMap(Function<? super T,? extends K> keyMapper, Function<? super T,? extends U> valueMapper)
    
    non risco ad implementarci una lambda per la seconda Function che mappa i valori delle chiavi, ma funziona col method reference.
    
    return lst.stream().collect(Collectors.toMap(i->"'"+i+"'", s -> s.length));
    
    Grazie e buona giornata


    PS: questa è la versione senza stream:
    
    public static Map<String, Integer> string2map2(List<String> lst){
    		Map<String, Integer> m = new HashMap<>();
    		
    		for(String s : lst){
    			m.put("'"+s+"'", s.length());
    		}
    		return m;
    	}
    
  • Re: [Stream] Esercizio

    Paolovox ha scritto:


    non risco ad implementarci una lambda per la seconda Function che mappa i valori delle chiavi, ma funziona col method reference.
    
    return lst.stream().collect(Collectors.toMap(i->"'"+i+"'", s -> s.length));
    
    length (di String) è un metodo ... non un campo.
Devi accedere o registrarti per scrivere nel forum
4 risposte