Visualizzazione dei risultati da 1 a 10 su 11

Hybrid View

  1. #1
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da cofra347 Visualizza il messaggio
    Si tratta di una sfilza di chiamate a cascata che includono il nuovo operatore ::, mi potreste dire cosa ci capite?
    Sono "novità" introdotte in Java 8, che ha portato nel linguaggio parecchie nuove cose tra cui principalmente: lambda expression e i method reference (insieme al concetto di functional interface). Inoltre Java 8 ha introdotto nel framework la Stream API.
    Tutto questo principalmente per portare la programmazione in Java più verso la programmazione funzionale.

    Credo sia ovvio che non si può spiegare tutto questo in un post sul forum ...

    Prima di arrivare a capire tutta quella parte, dovresti partire con l'apprendere cosa è una lambda expression in Java.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  2. #2
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Credo sia ovvio che non si può spiegare tutto questo in un post sul forum ...
    Ciao, "ovvissimo", ma non volevo questo.

    Quote Originariamente inviata da andbin Visualizza il messaggio
    Prima di arrivare a capire tutta quella parte, dovresti partire con l'apprendere cosa è una lambda expression in Java.
    Forse mi sono spiegato male; ho modificato il messaggio proprio per scrivere che so cosa è una funzione lambda (in precedenza ho solo scritto che ho letto su tutte le novità). Siccome ho un'infarinatura di tutto ciò che c'è di nuovo, vorrei la spiegazione di quella espressione in particolare che nonostante tutto, non capisco.

    Per esempio, mi pare quasi di arrivarci, ecco una mia "traduzione", dove non capisco cosa sia la X

    « filtra, dallo stream di AUTORIZZAZIONI_ATTIVE quelle che contengono la chiave X , e crea una mappa; per ogni elemento di tale mappa aggiungilo ad autorizzazioni »

    Ammesso che sia giusto... manca qualcosa: da dove prende la chiave che ho indicato con X?
    Rriscrivo l'espressione, per non dover riguardare sopra (dove contiene un errore: permissionArray dovrebbe essere arrayAutorizzazioni, ma ormai non posso correggere per esaurimento del tempo in cui si può fare)

    codice:
    autorizzazioni.AUTORIZZAZIONI_ATTIVE.stream().filter(Autorizzazioni.AUTORIZZAZIONI_ATTIVE::containsKey)
                  .map(Autorizzazioni.AUTORIZZAZIONI_ATTIVE::get).forEach(arrayAutorizzazioni::add);
    Ultima modifica di cofra347; 16-11-2017 a 23:11
    Libero > imposto
    Lunux > Windows
    Esperanto > lingua del padrone
    Kirek
    (dove > è "maggiore di")

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da cofra347 Visualizza il messaggio
    .filter(Autorizzazioni.AUTORIZZAZIONI_ATTIVE::cont ainsKey)
    containsKey (è di una Map) restituisce un boolean, che serve al filter. Quindi filter passa ciascun oggetto al containsKey di quella mappa e ne riceve un boolean. Se è true, filter "accetta" l'oggetto e lo fa passare più avanti.

    Quote Originariamente inviata da cofra347 Visualizza il messaggio
    .map(Autorizzazioni.AUTORIZZAZIONI_ATTIVE::get)
    map, nonostante il nome, NON ha a che fare con le mappe. L'operazione di "map" trasforma un valore in un altro. Quindi map passa al get di quella mappa l'oggetto (che funge da chiave) e ne ottiene il valore.

    Quote Originariamente inviata da cofra347 Visualizza il messaggio
    .forEach(arrayAutorizzazioni::add);
    Questo è il più facile. Per ciascun oggetto ottenuto a questo punto, lo passa al add di arrayAutorizzazioni.


    Non ho una visione completa del tuo codice ma il senso dedotto è questo.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    Grazie, sì AUTORIZZAZIONI_ATTIVE è una Map.

    Ora va un poco meglio ma non riesco ancora a capire come diamine fa containsKey() a restituire qualcosa se non gli passo niente. O meglio non vedo dove riceve la chiave da valutare per restituire vero o falso a seconda che la trovi nella mappa (la X del mio precedente commento).

    Forse salto questo pezzo e vado avanti per capire il resto.
    Libero > imposto
    Lunux > Windows
    Esperanto > lingua del padrone
    Kirek
    (dove > è "maggiore di")

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da cofra347 Visualizza il messaggio
    ma non riesco ancora a capire come diamine fa containsKey() a restituire qualcosa se non gli passo niente.
    Certo che gli viene passato qualcosa. L'espressione Autorizzazioni.AUTORIZZAZIONI_ATTIVE::containsKey NON è la invocazione di containsKey. E' invece una sorta di riferimento al containsKey di quella mappa, che viene passato al filter.
    Il filter riceve una "funzione" (nel senso delle functional interface di Java 8) che riceve un oggetto e restituisce un boolean. E il "corpo" di questa funzione è appunto la invocazione di containsKey.

    E' equivalente ad una lambda:

    codice:
    .filter(elem -> Autorizzazioni.AUTORIZZAZIONI_ATTIVE.containsKey(elem))

    Qui l'espressione della lambda sta effettivamene invocando il containsKey.
    Ultima modifica di andbin; 17-11-2017 a 00:01
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Eureka, sono un idiota.
    autorizzazioni è inizializzato nel costruttore , e contiene appunto quelle chiavi che poi sono passate a containsKey per la ricerca e restituzione vero/falso.

    Devo ancora ripensarci (usando anche le tue indicazioni) ma almeno ora ho tutti gli elementi per farlo.

    Per oggi sono distrutto, se questa è stata la vigilia di domani venerdì 17 allora domani forse non mi alzo proprio dal letto.

    Dankon, ankoraŭfoje.
    Libero > imposto
    Lunux > Windows
    Esperanto > lingua del padrone
    Kirek
    (dove > è "maggiore di")

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.