liste von hashmaps...

originalflo

Grünschnabel
hi leute, bin neu hier und hoffentlich im richtigen bereich des forums gelandet.

ich hantiere momentan mit aufträgen rum. das heisst: ich bekomme aufträge in eine textdatei, muss diese auslesen, sortieren,... und dann anzeigen,...

dazu habe ich mir folgendes überlegt:

ein job wird als hashmap gespeichert --> komfortabler zugriff über z.b. job.get("jobnr")

Code:
import java.util.*;
public class Job {

	private Map job;
	
	public Job(Date executionDate, int jobnr, String company, double longitude, double latitude) {
		this.job = new HashMap();
		this.add(executionDate, jobnr, company, longitude, latitude);
	}
	
	private void add(Date executionDate, int jobnr, String company, double longitude, double latitude) {
		this.job.put("executionDate", executionDate);
		this.job.put("jobnr", new Integer(jobnr));
		this.job.put("company", company);
		this.job.put("longitude", new Double(longitude));
		this.job.put("latitude", new Double(latitude));
	}
}

die Klasse Job: mehrere Aufträge in ner Liste...

Code:
import java.util.*;

public class JobList {
	private ArrayList jobList;
	
	public JobList() {
		this.jobList = new ArrayList();
	}
	
	public void Add(Job job) {
	   this.jobList.add(job);
	}
	
	public ArrayList GetJobList() {
		return this.jobList;
	}
}

und jetzt das eigentliche problem: ich erzeuge 2 neue jobs, werfe diese in die job-liste - hol mir dann diese liste um mit ihr zu arbeiten. dies ist eigentlich eine "ArrayList of HashMaps" - zu sehen ist sie allerdings nur als "ArrayList of Objects". Casten wie im folgenden Beispiel zieht nicht (muss vielleicht auch nicht sein?).

meine eigentliche fragen: ist der ansatz komplett sch!@$§e oder gibt's einen trick um von object nach hashmap zu casten?

habt ihr andere ansatzvorschläge (mir gehts dabei hauptsächlich um die sortierung nach datum)?

Code:
import java.util.*;

public class TestJob {
	
	private JobList jobList;
	
	public TestJob() {
		this.jobList = new JobList();
		this.initJobs();
		ArrayList jobs = this.jobList.GetJobList();
		
		HashMap tJob;
		
		for (int i=0; i<jobs.size(); i++) {
			
			tJob = (HashMap)jobs.get(i);
			System.out.println("job" + i + ":");
			System.out.println("auftragsnummer: " + tJob.get("jobnr"));
			System.out.println("firma: " + tJob.get("company"));
			System.out.println("datum: " + tJob.get("executiondate"));
			System.out.println("langitude: " + tJob.get("langitude"));
			System.out.println("longitude: " + tJob.get("longitude"));
		}
	}
	
	private void initJobs() {
		this.jobList.Add(new Job(new Date(), 123456789, "blub ag", 43.123456, 9.234567));
		this.jobList.Add(new Job(new Date(), 987654321, "muh ag", 33.123456, 7.234567));
	}
	
	public static void main(String[] args) {
		TestJob tJob = new TestJob();
	}

}


danke für eure hilfe

grunz
flo
 
In Deiner ArrayList befinden sich doch Job-Elemente, keine HashMaps! Außerdem könntest Du die ArrayList mit Parametern versehen (Stichwort Generics), damit entfällt das Casten.
 
danke für den hinweis... mal sehen was sich tun lässt,....

^ es liess sich einiges tun ;-)

die klasse job um folgende methode erweitert:
Code:
	public HashMap Get() {
		return this.job;
	}

java compiler compliance level auf 5 umgestelt (5er Syntax aktiviert) und meine TestJob klasse wie folgt abgewandelt:

Code:
	public TestJob() {
		this.jobList = new JobList();
		this.initJobs();
		ArrayList<Job> jobs = this.jobList.GetJobList();
		HashMap<String, Object> job;
		
		for (int i=0; i<jobs.size(); i++) {
			job = jobs.get(i).Get();
			System.out.println("job" + i + ":");
			System.out.println("auftragsnummer: " + String.valueOf(job.get("jobnr")));
			System.out.println("firma: " + String.valueOf(job.get("company")));
			System.out.println("datum: " + String.valueOf(job.get("executionDate")));
			System.out.println("latitude: " + String.valueOf(job.get("latitude")));
			System.out.println("longitude: " + String.valueOf(job.get("longitude")));
		}
	}

schön und gut... jetzt gehts ans sortieren - ich versuchs mal über einen comparator, mal sehen

gruß
 
Zuletzt bearbeitet:
hashmap war wohl ne schnapsidee ;-)

die Klasse Job:
Code:
public class Job implements Comparable {

	private Date executionDate;
	private Integer jobNr;
	private String company;
	private double latitude;
	private double longitude;

// ... getters, setters, compare methods for sorting

in der TestJob Klasse:
so wird ein neuer job in die liste geworfen:
Code:
		Job j = new Job();
		j.SetJobNr(123456789);
		j.SetExecutionDate(this.GetDate("22.12.2007"));
		j.SetCompany("blub ag");
		j.SetLatitude(43.123456);
		j.SetLongitude(9.234567);
		this.jobList.add(j);

sortieren und ausgabe dann über:

Code:
	    Collections.sort(this.jobList, Job.BY_JOBNR_DESC);
	    System.out.println();
	    System.out.println("Sorted by jobnr descending");
	    this.printJobs(this.jobList);

wo gibt's gratis online Watschen? ;-)
 
Zuletzt bearbeitet:
Zurück