Ho alcuni problemi con un esercizio dove è richiesto l'utilizzo dell'interfaccia funzionale Predicate.
L'esercizio richiede di creare una classe "Citta" che astrae il concetto di città e che dichiara le variabili nome di tipo String e capoluogo e diMare di tipo boolean.
Bisogna inoltre creare una classe TestCitta con un metodo main che stampa la lista di città sfruttando reference a metodi e interfaccia Pradicate.
Questa è la mia soluzione:
codice:
package com.java8.mod15.dati;
public class Citta {
private String nome;
private boolean capoluogo;
private boolean diMare;
public Citta(String nome, boolean capoluogo, boolean diMare) {
this.nome=nome;
this.capoluogo=capoluogo;
this.diMare=diMare;
}
public boolean isDiMare() {
if(diMare == true) {
return true;
}
else {
return false;
}
}
public boolean isCapoluogo() {
if(capoluogo == true) {
return true;
}
else {
return false;
}
}
public String toString() {
return nome;
}
}
codice:
package com.java8.mod15.test;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.function.Predicate;
import com.java8.mod15.dati.*;
public class TestCitta {
public static void main(String args[]) {
Citta milano = new Citta("Milano",true,false);
Citta bari = new Citta("Bari",true,true);
Citta foggia = new Citta("Foggia",false,false);
Citta venezia = new Citta("Venezia",true,true);
Citta roma = new Citta("Roma",true,false);
List<Citta> listaCitta = new ArrayList<>();
listaCitta.add(milano);
listaCitta.add(bari);
listaCitta.add(foggia);
listaCitta.add(venezia);
listaCitta.add(roma);
1 System.out.println("Lista città:\n" + getCittaFiltrate(listaCitta, TestCitta::getCitta));
2 public static List<Citta> getCittaFiltrate(List<Citta> listaCitta, Predicate<Citta> p) {
final Iterator<Citta> i = listaCitta.iterator();
while(i.hasNext()) {
Citta citta = i.next();
3 if(!p.test(citta)) {
i.remove();
}
}
4 return listaCitta;
}
}
public static boolean getCitta(Citta citta) {
return !"".equals(citta.toString());
}
}
però mi vengono segnalati in corrispondenza delle righe che ho segnato rispettivamente questi problemi:
1
The method getCittaFiltrate(List<Citta>, TestCitta::getCitta) is undefined for the type TestCitta
2
Multiple markers at this line
- p cannot be resolved to a variable
- Illegal modifier for parameter $missing$; only final is permitted
- Syntax error, insert ";" to complete Statement
- Predicate cannot be resolved to a variable
- Citta cannot be resolved to a variable
- Syntax error, insert "VariableDeclarators" to complete LocalVariableDeclaration
- List cannot be resolved to a variable
- Citta cannot be resolved to a variable
- Syntax error, insert ";" to complete LocalVariableDeclarationStatement
4
Void methods cannot return a value
Non riesco a capire come risolvere questi problemi, sicuramente ho capito io poco sull'utilizzo delle interfacce funzionali del package java.util.function.
Mi aiutate a capire?