programmazione-java/src/Temi d'esame/Albergo/Trivago.java

131 lines
2.7 KiB
Java

import java.util.Scanner;
import java.util.LinkedList;
import java.io.PrintStream;
import java.util.function.Predicate;
public class Trivago{
public Trivago(Scanner sc){
list=new LinkedList<Albergo>();
Albergo a=Albergo.read(sc);
while(a!=null){
list.add(a);
a=Albergo.read(sc);
}
}
private Trivago(LinkedList<Albergo> newList){
this.list=newList;
}
public void print(PrintStream ps){
for(Albergo a: list){
a.print(ps);
ps.println("****");
}
}
private Trivago filtro(Predicate<Albergo> p){
LinkedList<Albergo> listFilter = new LinkedList<Albergo>();
for(Albergo a: list)
if(p.test(a))
listFilter.add(a);
return new Trivago(listFilter);
}
public Trivago filtroTV(){
return filtro(new TVPredicate());
}
public Trivago filtroAria(){
return filtro(new AriaPredicate());
}
public Trivago filtroFrigo(){
return filtro(new FrigoPredicate());
}
public Trivago filtroInternet(){
return filtro(new InternetPredicate());
}
public Trivago filtroMaggiore(double prezzo){
return filtro(new MaggiorePredicate(prezzo));
}
public Trivago filtroMinore(double prezzo){
return filtro(new MinorePredicate(prezzo));
}
public Trivago filtroNome(String nome){
return filtro(new NomePredicate(nome));
}
private LinkedList<Albergo> list;
}
class TVPredicate implements Predicate<Albergo>{
public boolean test(Albergo a){
return a.hasTV();
}
}
class AriaPredicate implements Predicate<Albergo>{
public boolean test(Albergo a){
return a.hasAria();
}
}
class FrigoPredicate implements Predicate<Albergo>{
public boolean test(Albergo a){
return a.hasFrigo();
}
}
class InternetPredicate implements Predicate<Albergo>{
public boolean test(Albergo a){
return a.hasInternet();
}
}
class MaggiorePredicate implements Predicate<Albergo>{
public MaggiorePredicate(double prezzo){
this.prezzo=prezzo;
}
public boolean test(Albergo a){
return a.getPrezzo()>=prezzo?true:false;
}
private double prezzo;
}
class MinorePredicate implements Predicate<Albergo>{
public MinorePredicate(double prezzo){
this.prezzo=prezzo;
}
public boolean test(Albergo a){
return a.getPrezzo()<=prezzo?true:false;
}
private double prezzo;
}
class NomePredicate implements Predicate<Albergo>{
public NomePredicate(String nome){
this.nome=nome;
}
public boolean test(Albergo a){
return a.getNome().equals(nome);
}
private String nome;
}