Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 13 su 13
  1. #11
    Utente di HTML.it
    Registrato dal
    Oct 2014
    Messaggi
    315
    Grazie per la spiegazione.
    Avrei una curiosità. Quando si utilizza l'espressione lambda non bisogna inserire il return altrimenti si ha un errore di sintassi, io però credo di aver interpretato male questa cosa perchè ho notato l'esatto contrario invece.
    Facendo un esempio questi sono i metodi di prima:
    codice:
    public class TestCitta {
        public static void main(String args[]) {
        ....
                
        System.out.println("Lista città:\n" + getCittaFiltrate(listaCitta, TestCitta::getCitta) + "\n");    
          
        System.out.println("Lista città di mare:\n"+ getCittaFiltrate(listaCitta, TestCitta::mare) + "\n");
         
        System.out.println("Lista capoluoghi:\n" + getCittaFiltrate(listaCitta, TestCitta::capoluogo) + "\n");
        
        }
        
        public static List<Citta> getCittaFiltrate(List<Citta> listaCitta, Predicate<Citta> p) {
            List<Citta> listaAppoggio = new ArrayList<>();
            final Iterator<Citta> i = listaCitta.iterator();
            while(i.hasNext()) {            
                Citta citta = i.next();
                if(p.test(citta)) {
                    listaAppoggio.add(citta);
                }
            }
            return listaAppoggio;
        }
        
       public static boolean getCitta(Citta citta) {
            return !"".equals(citta.toString());
       }
    
       public static boolean mare(Citta citta) {
            return citta.isDiMare() == true;
       }
        
       public static boolean capoluogo(Citta citta) {
            return citta.isCapoluogo() == true;
       }
    
    }
    se io anzichè il reference a metodi volessi utilizzare le espressioni lambda dovrei modificare quei system.out.println in questo modo:
    codice:
    System.out.println("Lista città:\n" + getCittaFiltrate(listaCitta, (citta) -> {return !"".equals(citta.toString());} ) + "\n");    
    System.out.println("Lista città di mare:\n"+ getCittaFiltrate(listaCitta, (citta) -> {return citta.isDiMare();}) + "\n");
    System.out.println("Lista capoluoghi:\n" + getCittaFiltrate(listaCitta, (citta) -> {return citta.isCapoluogo();}) + "\n");
    funziona perfettamente però i return li ho usati altrimenti otterrei un errore di sintassi perchè i metodi getCitta, mare e capoluogo restituiscono comunque qualcosa (in questi caso dei booleani).
    E' corretto quindi utilizzarli?

  2. #12
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da newutente Visualizza il messaggio
    Avrei una curiosità. Quando si utilizza l'espressione lambda non bisogna inserire il return altrimenti si ha un errore di sintassi, io però credo di aver interpretato male questa cosa perchè ho notato l'esatto contrario invece.

    codice:
    System.out.println("Lista città:\n" + getCittaFiltrate(listaCitta, (citta) -> {return !"".equals(citta.toString());} ) + "\n");    
    System.out.println("Lista città di mare:\n"+ getCittaFiltrate(listaCitta, (citta) -> {return citta.isDiMare();}) + "\n");
    System.out.println("Lista capoluoghi:\n" + getCittaFiltrate(listaCitta, (citta) -> {return citta.isCapoluogo();}) + "\n");
    Il corpo di una lambda expression può essere: 1) una "espressione" oppure 2) un "blocco".

    Quindi:

    (citta) -> {return !"".equals(citta.toString());}

    e

    (citta) -> !"".equals(citta.toString())

    Sono assolutamente equivalenti.

    Ah, e per le regole delle lambda expression, se il parametro è uno solo e non è tipizzato esplicitamente, le parentesi ( ) possono anche essere omesse.
    Ultima modifica di andbin; 02-01-2015 a 22:14
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #13
    Utente di HTML.it
    Registrato dal
    Oct 2014
    Messaggi
    315
    Ah ecco, nel momento in cui nel metodo "iniziale" c'è una return devo per forza utilizzare le parentesi graffe e il punto e virgola, oppure non inserisco la return ma devo anche eliminare parentesi graffe e punto e virgola.

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.