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?