I seguenti metodi sono considerabili un filtro di ricerca in Java??
FinderoObj.java
Nella classe relativa al manager della struttura dati che sto utilizzando ho implementato questi due metodi, il primo per la ricerca di un oggetto e il secondo per la stampa dei risultaticodice:package com_antomau_HotelManagement.Structure.Finder; import com_antomau_HotelManagement.MyObjects.MyRoom; import com_antomau_HotelManagement.MyObjects.MyHotel; /** * Created by Antonio Maulucci http://www.antomau.com on 09/02/17. */ public class FinderObj { //variabili MyRoom r; MyHotel h; public FinderObj(MyHotel h, MyRoom r) { this.h = h; this.r = r; } public MyHotel getHotel() { return h; } public MyRoom getRoom() { return r; } public void print() { System.out.println(h.getSerial() + " " + r.getType()); } }
codice:public ArrayList<FinderObj> finder(boolean findprice, int price, boolean findtv, boolean findair, boolean findfridge, boolean findnet) { ArrayList<FinderObj> results = new ArrayList<FinderObj>(); //ottenere il keyset della mappa Set<MyHotel> mySet = getSet(); //esplorare il set per ottenere la lista delle stanze per ogni hotel for (MyHotel hh : mySet) { //ottengo la lista delle stanze corrispondenti all'hotel hh RoomsList rr = theMap.get(hh); //scorrere la lista a caccia dei dati delle singole stanze //ottengo un iteratore per la lista RoomsListIterator myIterator = rr.listIterator(); while (myIterator.hasNext()) //fintanto che l'iteratore rileva un'ulteriore nodo nella lista { MyRoom currentRoom = myIterator.next(); int found = 1; //1 if found or 0 if not found /* si sfrutta la moltiplicazione di 0 e 1 la variabile trovato inizialmente e' 1 se la stanza corrente corrsiponde a quella cercata il moltiplicatore viene moltiplicato * 1 > ergo il risultato non cambia se invece la stanza corrente non rispecchia i criteri di ricerca il moltiplicatore viene moltiplicato * 0 > ergo il risultato rimarra' per sempre 0 perche' 1*1=1 trovato 1*0=0 non trovato 0*1=0 trovato in tale modo la vriabile sara' 1 solo se tutti gli elementi sono stati trovati */ if (findprice) { if (currentRoom.getPrice() <= price) found*=1; else found*=0; } if (findtv) { if (currentRoom.getTv()) found*=1; else found*=0; } if (findair) { if (currentRoom.getAirConditioner()) found*=1; else found*=0; } if (findfridge) { if (currentRoom.getFridge()) found*=1; else found*=0; } if (findnet) { if (currentRoom.getInternet()) found*=1; else found*=0; } if (found==1) { FinderObj foundElement = new FinderObj(hh, currentRoom); results.add(foundElement); //se il risultato della ricerca e' 1 aggiungo la stanza corrente all'arraylist } } } System.out.println(results.toString()); //debug return results; }La chiamata a questo metodo all'interno del main è:codice:public String findPrintResults(boolean findprice, int price, boolean findtv, boolean findair, boolean findfridge, boolean findnet) { ArrayList<FinderObj> results = finder(findprice, price, findtv, findair, findfridge, findnet); String stringResults = ""; stringResults += "<html><table border\1\">"; stringResults += "<tr><th>Room type</th><th>Available rooms</th><th>Price</th><th>TV</th><th>airCond</th><th>Fridge</th><th>Internet</th></tr>"; //inserisco i risultati della ricerca in una stringa che formatta una tabella in html da impostare come argomento di una jlabel for (FinderObj fo : results) { MyRoom mr = fo.getRoom(); stringResults += "<tr><td><b>Hotel:</b></td><td colspan=\"6\">" + fo.getHotel().getSerial() + " -- " + fo.getHotel().getName() + " -- " + fo.getHotel().getAddress() + " -- " + fo.getHotel().getCity() + " -- " + fo.getHotel().getCountry() + " -- " + fo.getHotel().getPhone() + " -- " + fo.getHotel().getFax() + "</td></tr>"; stringResults += "<tr><td>" + mr.getType() + "</td><td>" + mr.getNum() + "</td><td>" + mr.getPrice() + "</td><td>" + mr.getTv() + "</td><td>" + mr.getAirConditioner() + "</td><td>" + mr.getFridge() + "</td><td>" + mr.getInternet() + "</td></tr>"; } stringResults += "</table></html>"; return stringResults; }
dove myMap è la struttura dati che ho utilizzato.codice:myMap.findPrintResults(findprice, price, findtv, findair, findfridge, findnet)
Traccia completa dell'esercizio: https://github.com/myblacksloth/java...ment/README.md
Il risultato della ricerca è:



Rispondi quotando
