Zum Inhalt springen

Wie kann ich eine Map erzeugen aus Daten einer anderen Klasse ?


java_anfaenger

Empfohlene Beiträge

vor 4 Stunden schrieb Rienne:

Viellicht wäre es mal ganz hilfreich, wenn du erst einmal erklärst, in welchem Zusammenhang du diese "Aufgabe" bearbeitest und dann die konkrete Aufgabenstellung postest, statt Code-Schnipsel und das, was du am Ende ausgegeben haben willst mit der Bedingung, dass es eine (Hash-)Map sein soll.

  • Starten Sie ein neues MainProgramm.

  • Holen Sie den ersten Datensatz bezüglich Lieblingsfächer. Gehen Sie die Daten-Zeilen durch und erzeugen Sie dementsprechend Student-Objekte.

  • Speichern Sie die Student-Objekte nicht in einer List, sondern in einer Map: Schlüssel: Matrikelnummer  Wert: Student-Objekt

  • Um die Implementierung zu vereinfachern, speichern Sie das Lieblingsfach als einen String und nicht als Fach-Objekt.

 

Das ist die Aufgabenstellung ... die ich durcharbeiten muss

Link zu diesem Kommentar
Auf anderen Seiten teilen

List<Student> deserializedStudents = serializedStudents.stream()
	                .map(Student::deserialize)
	                .collect(Collectors.toList());

Die Stelle in der zweiten und dritte Zeile ist fehlerhaft..sagt halt das die Klasse Student diese Funktion deserialize nicht definiert

 

Exception in thread "main" java.lang.Error: Unresolved compilation problems:

The method map(Function<? super String,? extends R>) in the type Stream<String> is not applicable for the arguments (Student::deserialize)

The type Student does not define deserialize(String) that is applicable here

Collectors cannot be resolved

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 36 Minuten schrieb java_anfaenger:

Die Stelle in der zweiten und dritte Zeile ist fehlerhaft..sagt halt das die Klasse Student diese Funktion deserialize nicht definiert

Ich würde dir echt gerne Helfen und das Problem lösen, allerdings wäre der Lerneffekt für dich leider bei 0.
Das macht meiner Meinung nach leider kein Sinn.

Die Fehlermeldung sagt es ja bereits was das Problem ist.
Schau dir die Klasse Student im Code an ...

 

Im Prinzip haben wird dir deine Aufgabe schon erledigt.
Das einzige, was du nur noch machen musst, ist aus der Daten Zeile ein Student Objekt erstellen. Dafür ist die Methode serialize in der Klasse Student zu implementieren die aus einem Daten-String, welcher alle drei Werte enthält - getrennt mit einem Semikolon ";", eine Instanz der Klasse Studen zurückliefert.
Ich hoffe das du deine Lösung auch erklären kannst, falls du diese vorstellen musst.

Bearbeitet von r4phi
Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 1 Minute schrieb r4phi:

Ich würde dir echt gerne Helfen und das Problem lösen, allerdings wäre der Lerneffekt für dich leider bei 0.
Das macht meiner Meinung nach leider kein Sinn.

Die Fehlermeldung sagt es ja bereits was das Problem ist.
Schau dir die Klasse Student im Code an ...

Ich habe meinen Code etwas geändert .. nur gibt der mir nichts aus .. 

 public static void main(String[] args) {
	    	Map<Integer, Student> studentdaten = new HashMap<Integer, Student>();
	    	
	    	Student student = studentdaten.get("Name;Matrikelnummer;Lieblingsfach");
	    	Set<Integer> namen = studentdaten.keySet();
	    	for(Integer name : namen) {
	    		System.out.println(name + "-->" + studentdaten.get(name) );

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich hab aber eher das Gefühl, dass du es nicht verstehen möchtest und dir auch egal ist, was hier geschrieben wird. Anstatt die Tipps anzunehmen und daran zu arbeiten, machst du komplett was anderes.

Ich rate dir dringend ein Tutorial durchzuarbeiten. Dir fehlen komplett die Grundlagen der Informatik. Dir ist nicht mal klar, was Datentypen sind. Wie soll man denn da helfen, ohne Frontalunterricht zu geben?

Hier ist ein Tutorial:

Ich denke (oder ich hoffe), dass dir dann auch einiges klarer wird und merkst, dass dein Code keinen Sinn ergibt.

Link zu diesem Kommentar
Auf anderen Seiten teilen

public class main {

	    public static void main(String[] args) {
	    	Map<String, Student> studentdaten = new HashMap<String, Student>();
	    	
	    	//Student student = studentdaten.get("Name;Matrikelnummer;Lieblingsfach");
	    	Set<String> lieblingsfach = studentdaten.keySet();
	    	
	    	System.out.println(lieblingsfach);
	    }

Ich hab jetzt etwas recherchiert und möchte jetzt nur wissen warum ich als Ausgabe nur Output : []

bekomme ?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Was soll denn dabei deiner Meinung da rauskommen? Die HashMap wird nirgends gefüllt.

Lass die HashMap doch mal weg. Die brauchst du sowieso nicht, was ich schon Tausend Mal geschrieben habe und erzeuge einfach nur ein einzelnes Student-Objekt.

 

 

Bearbeitet von Whiz-zarD
Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 6 Minuten schrieb Whiz-zarD:

Was soll denn dabei deiner Meinung da rauskommen? Die HashMap wird nirgends gefüllt.

Lass die HashMap doch mal weg. Die brauchst du sowieso nicht, was ich schon Tausend Mal geschrieben habe und erzeuge einfach nur ein einzelnes Student-Objekt.

 

 

Ich brauch für die Aufgabe die ich erledigen muss eine HashMap ich würde es gerne ja weglassen und über eine List durchlaufen lassen, aber das kann ich nicht in diesem Fall. Versuch es doch mal zu verstehen :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 4 Stunden schrieb java_anfaenger:
  • Starten Sie ein neues MainProgramm.

  • Holen Sie den ersten Datensatz bezüglich Lieblingsfächer. Gehen Sie die Daten-Zeilen durch und erzeugen Sie dementsprechend Student-Objekte.

  • Speichern Sie die Student-Objekte nicht in einer List, sondern in einer Map: Schlüssel: Matrikelnummer  Wert: Student-Objekt

  • Um die Implementierung zu vereinfachern, speichern Sie das Lieblingsfach als einen String und nicht als Fach-Objekt.

 

Das ist die Aufgabenstellung ... die ich durcharbeiten muss

@Whiz-zarD

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dann fangen wir halt von vorne an.

Wie muss der Code denn aussehen, um aus "Test1;1111;Mathe" das Lieblingsfach herauszufiltern?

Die Methode split() wurde doch schon erwähnt. Hier steht alles, was man darüber wissen muss.

Edit:
Oder anders gefragt: Wie kannst du mit Hilfe der split()-Methode den String in seine Einzelteile zerlegen?

Bearbeitet von Whiz-zarD
Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 9 Minuten schrieb Whiz-zarD:

Dann fangen wir halt von vorne an.

Wie muss der Code denn aussehen, um aus "Test1;1111;Mathe" das Lieblingsfach herauszufiltern?

Die Methode split() wurde doch schon erwähnt. Hier steht alles, was man darüber wissen muss.

Das hatte ich auch gesehen,  hab es versucht, aber leider kein Erfolg gehabt.

Link zu diesem Kommentar
Auf anderen Seiten teilen

public class main {

	    public static void main(String[] args) {
	    	Map<String, Student> studentdaten = new HashMap<String, Student>();
	    	
	    	Student student = new Student("", 0, null);
	    	Set<String> lieblingsfach = studentdaten.keySet();
	    	
	    	System.out.println(lieblingsfach);
	    }
}

Mein code sieht bis jetzt so aus ... ich weiß nicht weiter

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 5 Minuten schrieb java_anfaenger:

Mein code sieht bis jetzt so aus ... ich weiß nicht weiter

Weil du nie das machst, was man dir sagt... 🙄

Wie teilst du den String mittels split() auf? Dafür brauchst du noch keine HashMap oder sonstigen Kram.

Schaue dir dieses Beispiel an und versuche es, in deinen Anwendungsfall umzuändern:

String path = "www.tutego.com";
String[] segs = path.split( Pattern.quote( "." ) );
System.out.println( Arrays.toString(segs) ); // [www, tutego, com]

In der Softwareentwicklung geht es darum, Probleme in kleine Teilprobleme zu lösen und mir geht es erstmal nur darum, die Informationen, die im string enthalten sind, zu teilen, sodass man einzeln darauf zugreifen kann. In dem Beispiel steht exakt beschrieben, wie das funktioniert. Hier wird eine URL in seine Einzelteile verlegt: Subdomain ("www"), Domain ("tutego" )und Top-Level-Domain ("de").

Bearbeitet von Whiz-zarD
Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 14 Minuten schrieb Whiz-zarD:

Weil du nie das machst, was man dir sagt... 🙄

Wie teilst du den String mittels split() auf? Dafür brauchst du noch keine HashMap oder sonstigen Kram.

Schaue dir dieses Beispiel an und versuche es, in deinen Anwendungsfall umzuändern:


String path = "www.tutego.com";
String[] segs = path.split( Pattern.quote( "." ) );
System.out.println( Arrays.toString(segs) ); // [www, tutego, com]

 

Ich verstehe dich nicht .. ich muss es doch nicht teilen wenn es einfach ein String ist und es definiert ist..kann ich doch einfach durch die Liste iterieren ..irgendwie so in dem Stil ..

public class main {

	    public static void main(String[] args) {
	    	Map<Student, List<String>> studentdaten = new HashMap<Student, List<String>>();
	    	
	    	for(Student student : studentenDaten) {
	    		String lieblingsfach = student.getlieblingsFach();
	    		Student student = new Student(lieblingsfach);
	    		System.out.print("Lieblingsfach" + student);
	    	}
	    }
}

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 10 Minuten schrieb java_anfaenger:

Ich verstehe dich nicht .. ich muss es doch nicht teilen wenn es einfach ein String ist und es definiert ist..kann ich doch einfach durch die Liste iterieren ..irgendwie so in dem Stil ..

 

Vergiss doch endlich meinen Code...

Dein String besteht doch aus drei Informationen: Name, Matrikelnummer und Lieblingsfach und du willst auf Matrikelnummer und Lieblingsfach zugreifen können.  Schaue dir das Beispiel an. Hier passiert exakt das selbe:

String path = "www.tutego.com";
String[] segs = path.split( Pattern.quote( "." ) );
System.out.println( Arrays.toString(segs) ); // [www, tutego, com]

Der String besteht ebenfalls aus drei Informationen: Subdomain ("www"), Domain ("tugego") und Top-Level-Domain ("de").

Wie muss also nun dein Code aussehen, um die Informationen zu trennen? Hier brauchst du überhaupt noch keine HashMap. Die brauchen wir erst später.

Bearbeitet von Whiz-zarD
Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 11 Minuten schrieb Whiz-zarD:

Vergiss doch endlich meinen Code...

Dein String besteht doch aus drei Informationen: Name, Matrikelnummer und Lieblingsfach und du willst auf Matrikelnummer und Lieblingsfach zugreifen können.  Schaue dir das Beispiel an. Hier passiert exakt das selbe:


String path = "www.tutego.com";
String[] segs = path.split( Pattern.quote( "." ) );
System.out.println( Arrays.toString(segs) ); // [www, tutego, com]

Der String besteht ebenfalls aus drei Informationen: Subdomain ("www"), Domain ("tugego") und Top-Level-Domain ("de").

Wie muss also nun dein Code aussehen, um die Informationen zu trennen? Hier brauchst du überhaupt noch keine HashMap. Die brauchen wir erst später.

 public static void main(String[] args) {
	    	String path = "Name;Matrikelnummer;Lieblingsfach";
	    	String[] segs = path.split( Pattern.quote( "." ) );
	    	System.out.println( Arrays.toString(segs) );

So also?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das geht schon in die richtige Richtung aber schaue dir doch dein Code genau an und führe ihn doch mal aus und guck, was passiert. In der Variable segs wird nichts drinnen stehen, wieso ist das so? Nach welchem Kriterium splittest du nun dein String? Oder noch mal anders gefragt: Was macht split() bei dir?

 

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 15 Minuten schrieb java_anfaenger:

So also?

Naja du hast es ja wahrscheinlich bereits ausgeführt und gesehen, das der String noch nicht in die 3 Teil-Strings "Name", "Martikelnummer" und "Lieblingsfach" unterteilt wurde.

Aber als du das dreizeilige Beispiel von @Whiz-zarD in dein Programm eingefügt hast, wurde der String "www.tutego.com" ja in die 3 Teil-Strings "www", "tutego" und "com" unterteilt.

vor 5 Stunden schrieb r4phi:

Tu dir mal den Gefallen und Kommentiere JEDE Codezeile.
Der Kommentar enthält eine Beschreibung darüber was die Codezeile macht.

Versuch für die 3 Zeilen innerhalb deiner Main Methode mal diesen Tipp zu beherzigen.

 

Was passiert in dieser Zeile?

vor 14 Minuten schrieb java_anfaenger:

String path = "Name;Matrikelnummer;Lieblingsfach";

Was passiert in dieser Zeile?

vor 15 Minuten schrieb java_anfaenger:

String[] segs = path.split( Pattern.quote( "." ) );

Was passiert in dieser Zeile?

vor 15 Minuten schrieb java_anfaenger:

System.out.println( Arrays.toString(segs) );

 

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 3 Minuten schrieb Whiz-zarD:

Das geht schon in die richtige Richtung aber schaue dir doch dein Code genau an und führe ihn doch mal aus und guck, was passiert. In der Variable segs wird nichts drinnen stehen, wieso ist das so? Nach welchem Kriterium splittest du nun dein String? Oder noch mal anders gefragt: Was macht split() bei dir?

 

 

Ich habe ein Beispiel dessen gesehen wie es ausschauen soll am Ende und da sehe ich nichts mit splitten ... das ist mein Problem was ich versuche dir zu erklären .. es muss doch irgendwie so funktionieren ..

 

public class main {

	    public static void main(String[] args) {
	    	//String path = "Name;Matrikelnummer;Lieblingsfach";
	    	//String[] segs = path.split( Pattern.quote( "." ) );
	    	//System.out.println( Arrays.toString(segs) );
	    	
	    	List<String> studentenDaten = new ArrayList<String>();
	    	Map<Integer, List<String>> alleDaten = new HashMap<Integer, List<String>>();
	    	
	    	for(Student student : alleDaten) {
	    		String lieblingsfach = Student.getLieblingsfach();
	    		Student studentfach = new Student(lieblingsfach, 0, lieblingsfach);
	    		System.out.print("Lieblingsfach" + studentfach);
	    	}
	    	
	    		
	    }
}

Nur sagt der mir das alleDaten falsch ist in der for schleife, dass er nur über ein Array iterieren kann.

Es ist wahrscheinlich effizienter mit der split methode, doch geht es nicht ohne ?

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 8 Minuten schrieb java_anfaenger:

Ich habe ein Beispiel dessen gesehen wie es ausschauen soll am Ende und da sehe ich nichts mit splitten ... das ist mein Problem was ich versuche dir zu erklären .. es muss doch irgendwie so funktionieren ..

So schwer ist das doch nicht...

Schaue dir den String an "Test1;1111;Mathe". Durch welches Zeichen werden die drei Informationen getrennt?
Und dann schaue dir mein Beispiel an "www.tutego.de". Durch welches Zeichen werden die drei Informationen getrennt?

Schaue dir dann den Code an und finde den Fehler.

UND VERGISS DIE HASHMAP! DIE KOMMT SPÄTER! DIE BRAUCHST DU NOCH NICHT!

Bearbeitet von Whiz-zarD
Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...