Zum Inhalt springen

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


java_anfaenger

Empfohlene Beiträge

Guten Tag,

 

ich würde gerne wissen, wie ich in meiner Main auf diese Datenzeile zugreifen kann.

Ich würde gerne eine Map erzeugen in der Main mit Studentobjekten welche die Lieblingsfächer anzeigt.

 

Ich habe kein schimmer, wie ich auf die Daten von einer anderen Klassen zugreife und wie ich so eine Map erstelle mit dem Schlüssel : Matrikelnummer und dem Wert : Studentobjekt

 

 

Die Daten Klasse würde sagen wir mal so aussehen:

public static List<String> datenstudi(){

        List<String> studidaten = new ArrayList<String>();

        // Format:

        // Name ; Matrikelnummer ; Lieblingsfach

        

        studidaten.add("Test uno;999999;fach I");

        studidaten.add("Horst Lied;111111;fach II");

 

Wäre die Main am Anfang so ?:

import java.util.HashMap;

import java.util.Map;



public class main {

    

    public static void main(String[] args) {

        Map<Integer, String> map = new HashMap<Integer, String>();

        

        System.out.println("");

    }

    

}

 

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Grüße dich,

Um dich richtig zu verstehen:
Du möchtest eine Map<K, V> erzeugen die Matrikelnummer als Schlüssel und das Studentenobjekt als Wert enthält?

final Map<String> myMap = new HashMap();
myMap.put(99999, "Test uno;999999;fach I";

Ein anderer Punkt:
Du könntest deinen Studenten auch als Klasse modelieren.
Aktuell ist dieser ja "nur" ein String.

Bearbeitet von r4phi
Link zu diesem Kommentar
Auf anderen Seiten teilen

Deine Datenklasse macht so keinen Sinn, das ist keine Klasse und ist auch syntaktisch nicht in Ordnung. Wenn du Studentenobjekte haben willst, musst du auch eine Klasse Student erstellen und damit dann Objekte erzeugen. Bei dir sieht das ja aktuell so aus als wolltest du die Studentendaten einfach in einen String packen.

Auf die Daten einer anderen Klasse greifst du über eine Schnittstelle zu, die diese Klasse anbieten muss (z.B. getter).

Am besten solltest du erst mal die Basics ansehen: was ist eine Klasse usw. usf.

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 1 Minute schrieb r4phi:

Grüße dich,

Um dich richtig zu verstehen:
Du möchtest eine Map<K, V> erzeugen die Matrikelnummer als Schlüssel und das Studentenobjekt als Wert enthält?


final Map<String> myMap = new HashMap();
myMap.put(99999, "Test uno;999999;fach I";

Ein anderer Punkt:
Du könntest deinen Studenten auch als Klasse modelieren.
Aktuell ist dieser ja "nur" ein String.

Danke erstmal. Das wäre aber hierbei nur ein einzelner Output stimmt das ? 

Was wäre wenn es etliche Daten gibt und ich nur die Matrikelnummer und das Lieblingsfach raus fischen möchte.

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 1 Minute schrieb lessbess:

Deine Datenklasse macht so keinen Sinn, das ist keine Klasse und ist auch syntaktisch nicht in Ordnung. Wenn du Studentenobjekte haben willst, musst du auch eine Klasse Student erstellen und damit dann Objekte erzeugen. Bei dir sieht das ja aktuell so aus als wolltest du die Studentendaten einfach in einen String packen.

Auf die Daten einer anderen Klasse greifst du über eine Schnittstelle zu, die diese Klasse anbieten muss (z.B. getter).

Am besten solltest du erst mal die Basics ansehen: was ist eine Klasse usw. usf.

Dann aber im Bezug auf die HashMap darauf achten

equals()
 hashCode() 

in der Klasse richtig zu implementieren.
Das geht aber glaube ich aktuell zu weit

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 4 Minuten schrieb lessbess:

Deine Datenklasse macht so keinen Sinn, das ist keine Klasse und ist auch syntaktisch nicht in Ordnung. Wenn du Studentenobjekte haben willst, musst du auch eine Klasse Student erstellen und damit dann Objekte erzeugen. Bei dir sieht das ja aktuell so aus als wolltest du die Studentendaten einfach in einen String packen.

Auf die Daten einer anderen Klasse greifst du über eine Schnittstelle zu, die diese Klasse anbieten muss (z.B. getter).

Am besten solltest du erst mal die Basics ansehen: was ist eine Klasse usw. usf.

Ja, so wollte ich es auch machen. 

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 5 Minuten schrieb java_anfaenger:

Danke erstmal. Das wäre aber hierbei nur ein einzelner Output stimmt das ? 
 

In meinem Beispiel wäre das erst mal ein Eintrag in der Map. Eine Ausgabe findet noch nicht statt.

Zitat

Was wäre wenn es etliche Daten gibt und ich nur die Matrikelnummer und das Lieblingsfach raus fischen möchte.

 

Dann müsstest du in deinem Beispiel mit der Stream Api über das Entry set gehen....

myMap.entrySet()
        .forEach(x -> log.debug("{} {}",x.getKey(), x.getValue()));

Wobei es sicherlich sinnvoller wäre uns zu nennen wo du gerne hin möchtest und das lässt sich dann po a po aufarbeiten.

Bearbeitet von r4phi
Link zu diesem Kommentar
Auf anderen Seiten teilen

vor einer Stunde schrieb r4phi:

In meinem Beispiel wäre das erst mal ein Eintrag in der Map. Eine Ausgabe findet noch nicht statt.

Dann müsstest du in deinem Beispiel mit der Stream Api über das Entry set gehen....


myMap.entrySet()
        .forEach(x -> log.debug("{} {}",x.getKey(), x.getValue()));

Wobei es sicherlich sinnvoller wäre uns zu nennen wo du gerne hin möchtest und das lässt sich dann po a po aufarbeiten.

Also nochmals .. 
Ich habe eine Klasse in welche Daten drin sind .. 

ich möchte in der Main eine Map erzeugen welche den Schlüsse: Matrikelnummer und den Wert Objekt annimmt. 

Also irgendwie möchte ich das Lieblingsfach ausgeben. Ich könnte es ja in ein String speichern ..

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 15 Minuten schrieb java_anfaenger:

Also nochmals .. 
Ich habe eine Klasse in welche Daten drin sind .. 

ich möchte in der Main eine Map erzeugen welche den Schlüsse: Matrikelnummer und den Wert Objekt annimmt. 

Also irgendwie möchte ich das Lieblingsfach ausgeben. Ich könnte es ja in ein String speichern ..

Okay, aber wofür dann die (Hash)Map?
Du möchtest doch eigentlich nur eine Liste von Datensätzen haben.
Eine Liste von Studenten. Dann möchtest du von jedem Studenten das Lieblingsfach ausgeben.?

 

class Student {
    public String name;
    public String lieblingsfach;
    public String irgendEineNummer;

    public Student(String name, String lieblingsfach, String irgendEineNummer) {
        this.name = name;
        this.lieblingsfach = lieblingsfach;
        this.irgendEineNummer = irgendEineNummer;
    }

    public String getName() {
        return this.name;
    }

    public String getLieblingsfach() {
        return this.lieblingsfach;
    }

    public String getIrgendEineNummer() {
        return this.irgendEineNummer;
    }
}

class Foo {
    private List<Student> gievStudentenPlx() {
        return List.of(
            new Student("Peter", "Lieblingsfach", "123456"),
            new Student("Peter2", "Lieblingsfach2", "123456"),
            new Student("Peter3", "Lieblingsfach3", "123456"),
            new Student("Peter5", "Lieblingsfach4", "123456"),
            new Student("Peter6", "Lieblingsfach5", "123456")
            );
    }

    private void zeigeFachOnTehConsol() {

        final List<Student> currenStudentZ = gievStudentenPlx();
        currenStudentZ.stream().map(Student::getLieblingsfach).forEach(System.out::println);
        // or
        currenStudentZ.forEach(currenStudent -> System.out.println(currenStudent.getLieblingsfach()));
    }
}


Damit wird dir auch nicht geholfen sein.
Allerdings sind deine Ausführungen auch ziemlich unspezifisch.

Bearbeitet von r4phi
Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 14 Minuten schrieb r4phi:

Okay, aber wofür dann die (Hash)Map?
Du möchtest doch eigentlich nur eine Liste von Datensätzen haben.
Eine Liste von Studenten. Dann möchtest du von jedem Studenten das Lieblingsfach ausgeben.?

 


class Student {
    public String name;
    public String lieblingsfach;
    public String irgendEineNummer;

    public Student(String name, String lieblingsfach, String irgendEineNummer) {
        this.name = name;
        this.lieblingsfach = lieblingsfach;
        this.irgendEineNummer = irgendEineNummer;
    }

    public String getName() {
        return this.name;
    }

    public String getLieblingsfach() {
        return this.lieblingsfach;
    }

    public String getIrgendEineNummer() {
        return this.irgendEineNummer;
    }
}

class Foo {
    private List<Student> gievStudentenPlx() {
        return List.of(
            new Student("Peter", "Lieblingsfach", "123456"),
            new Student("Peter2", "Lieblingsfach2", "123456"),
            new Student("Peter3", "Lieblingsfach3", "123456"),
            new Student("Peter5", "Lieblingsfach4", "123456"),
            new Student("Peter6", "Lieblingsfach5", "123456")
            );
    }

    private void zeigeFachOnTehConsol() {

        final List<Student> currenStudentZ = gievStudentenPlx();
        currenStudentZ.stream().map(Student::getLieblingsfach).forEach(System.out::println);
        // or
        currenStudentZ.forEach(currenStudent -> System.out.println(currenStudent.getLieblingsfach()));
    }
}


Damit wird dir auch nicht geholfen sein.
Allerdings sind deine Ausführungen auch ziemlich unspezifisch.

Aber die Klasse foo schreibt ja neue Studenten rein .. 
Ich meinte ja es gibt eine Klasse mit Daten von Studenten welche schon das Format beinhaltet. Ich müsste sozusagen in der Main nur drauf zu greifen und die Studenten ausgeben

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor einer Stunde schrieb r4phi:

Okay, aber wofür dann die (Hash)Map?
Du möchtest doch eigentlich nur eine Liste von Datensätzen haben.
Eine Liste von Studenten. Dann möchtest du von jedem Studenten das Lieblingsfach ausgeben.?

 


class Student {
    public String name;
    public String lieblingsfach;
    public String irgendEineNummer;

    public Student(String name, String lieblingsfach, String irgendEineNummer) {
        this.name = name;
        this.lieblingsfach = lieblingsfach;
        this.irgendEineNummer = irgendEineNummer;
    }

    public String getName() {
        return this.name;
    }

    public String getLieblingsfach() {
        return this.lieblingsfach;
    }

    public String getIrgendEineNummer() {
        return this.irgendEineNummer;
    }
}

class Foo {
    private List<Student> gievStudentenPlx() {
        return List.of(
            new Student("Peter", "Lieblingsfach", "123456"),
            new Student("Peter2", "Lieblingsfach2", "123456"),
            new Student("Peter3", "Lieblingsfach3", "123456"),
            new Student("Peter5", "Lieblingsfach4", "123456"),
            new Student("Peter6", "Lieblingsfach5", "123456")
            );
    }

    private void zeigeFachOnTehConsol() {

        final List<Student> currenStudentZ = gievStudentenPlx();
        currenStudentZ.stream().map(Student::getLieblingsfach).forEach(System.out::println);
        // or
        currenStudentZ.forEach(currenStudent -> System.out.println(currenStudent.getLieblingsfach()));
    }
}


Damit wird dir auch nicht geholfen sein.
Allerdings sind deine Ausführungen auch ziemlich unspezifisch.

public class main {
	
	public static void main(String[] args) {
		// Name ; Matrikelnummer ; Lieblingsfach
		Map<String, Integer> studentenDatenHolen = ...;
		
	
		Map<String, Integer> datenholen = new HashMap<String, Integer>(studentenDatenHolen);
		
		
		System.out.println(studentenDatenHolen);
		Set<String> Lieblingsfach = datenholen.keySet();
		for(String fach : Lieblingsfach) {
			System.out.println(fach + "-->" + datenholen.get(fach));
		}
	}
	
}

Habe so etwas kreiert doch leider funktioniert es nicht ... 

Nochmals die Datenklasse sieht so aus..:

public static List<String> studentenDatenHolen(){
		List<String> studentenDaten = new ArrayList<String>();
		// Format:
		// Name ; Matrikelnummer ; Lieblingsfach
		
		studentenDaten.add("Test;111111:Fach1");
		studentenDaten.add("Test2;222222;Fach2");
		studentenDaten.add("Test3;333333;Fach3");
		studentenDaten.add("Test4;444444;Fach4");
		studentenDaten.add("Test5;555555;Fach5");

 

Bearbeitet von java_anfaenger
Link zu diesem Kommentar
Auf anderen Seiten teilen

Wenn man auch alles ignoriert, was hier geschrieben wird... 🙄

 vor 7 Minuten schrieb java_anfaenger:

Nochmals die Datenklasse sieht so aus..:


public static List<String> studentenDatenHolen(){
		List<String> studentenDaten = new ArrayList<String>();
		// Format:
		// Name ; Matrikelnummer ; Lieblingsfach
		
		studentenDaten.add("Test;111111:Fach1");
		studentenDaten.add("Test2;222222;Fach2");
		studentenDaten.add("Test3;333333;Fach3");
		studentenDaten.add("Test4;444444;Fach4");
		studentenDaten.add("Test5;555555;Fach5");

 

Das ist keine Datenklasse. Das ist nur eine Liste mit Strings...

 

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

Damit kannst du aber nichts anfangen...

Versuchst du eigentlich überhaupt zu verstehen, was hier geschrieben wird? Das sieht für mich nicht danach aus, denn exakt die selbe Frage in diesem Thread hast du schon im anderen Thread gestellt...

Ich hab sogar eine Vorlage vorgegeben, an die du dich orientieren könntest aber nein. Lieber ignorieren und die Frage noch mal stellen... 🙄

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

vor 3 Minuten schrieb Whiz-zarD:

Damit kannst du aber nichts anfangen...

Versuchst du eigentlich überhaupt zu verstehen, was hier geschrieben wird? Das sieht für mich nicht danach aus, denn exakt die selbe Frage in diesem Thread hast du schon im anderen Thread gestellt...

Wieso kann ich denn damit nichts anfangen ? .. Also was meinst du mit ich kann damit nichts anfangen es ist doch eine Liste voller Daten warum kann ich keine Map erstellen in welcher ich über die Daten iteriere und bestimmtes outputen lasse

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 7 Minuten schrieb java_anfaenger:

Wieso kann ich denn damit nichts anfangen ?

Weil es eine Liste von Strings ist ... Ist dir klar, was ein String ist? Das ist einfach nur Text.

Ich könnte auch folgendes schreiben:

studentenDaten.add("Holla Die Weldfee");
studentenDaten.add("Übel übel, sprach der Dübel.");

Du musst eine Klasse mit Studentendaten bauen, wie ich es schon vorgegeben habe.

Dann hast du eine Liste von Studenten und kannst dann einfach auf die Eigenschaften zugreifen:

for(Student student : studenten) {
  System.out.println(fach + "-->" + student.getLieblingsfach());
}
	

 

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

Gerade eben schrieb Whiz-zarD:

Weil es eine Liste von Strings ist ... Ist dir klar, was ein String ist? Das ist einfach nur Text.

Ich könnte auch folgendes schreiben:


studentenDaten.add("Holla Die Weldfee");
studentenDaten.add("Übel übel, sprach der Dübel.");

 

 

Genau wenn man das schreiben kann wieso kann ich nicht über Strings iterieren ? 

Ich möchte den ersten Datensatz bezüglich Lieblingsfächer holen. Ich möchte dafür Student-Objekte erzeugen. Die sind ja in einer List ich möchte eine Map erzeugen Mit dem Schlüssel:

Matrikelnummer - > Wert: Student-Objekt

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 2 Minuten schrieb java_anfaenger:

Genau wenn man das schreiben kann wieso kann ich nicht über Strings iterieren ?

String ist einfach nur ein Text..

Wenn du die Daten mit Semikolon getrennt in ein String packst, wie willst du denn auf die einzelnen Daten zugreifen? Das ist genau deine Frage und die Antwort ist, dass es nicht geht, ohne den String interpretieren zu müssen. D.h. man müsste erstmal aus dem String ein String-Array zu bauen und dann aus diesem Array den String holen, der sich an der jeweiligen Position befindet, wo wir auch unsere Daten vermuten. So macht man das aber nicht. Man entwickelt Klassen für die Daten. Arbeite am besten ein Java-Tutorial durch, da ich das Gefühl habe, dass du einfach von Softwareentwicklung noch nichts verstehst. Dir ist offenbar nicht mal klar, was ein Datentyp ist. Also die elementarsten Grundlagen der Informatik fehlen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Vielleicht wird es ja deutlicher, wenn ich sage, dass String ein Datentyp ist, der beliebigen Text beinhalten kann. Dem String ist es egal, was für ein Text du da reinschreibst. Du hast also keine Studentendaten sondern nur Text, der zufällig serialisierte Werte für einen Studenten besitzt.

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

vor 52 Minuten schrieb Whiz-zarD:

String ist einfach nur ein Text..

Wenn du die Daten mit Semikolon getrennt in ein String packst, wie willst du denn auf die einzelnen Daten zugreifen? Das ist genau deine Frage und die Antwort ist, dass es nicht geht, ohne den String interpretieren zu müssen. D.h. man müsste erstmal aus dem String ein String-Array zu bauen und dann aus diesem Array den String holen, der sich an der jeweiligen Position befindet, wo wir auch unsere Daten vermuten. So macht man das aber nicht. Man entwickelt Klassen für die Daten. Arbeite am besten ein Java-Tutorial durch, da ich das Gefühl habe, dass du einfach von Softwareentwicklung noch nichts verstehst. Dir ist offenbar nicht mal klar, was ein Datentyp ist. Also die elementarsten Grundlagen der Informatik fehlen.

So anscheinend ist mir nicht klar was ein Datentyp ist. 

 

public class Student {

	private String name = "";
	private int matrikelnummer = 0;
	private String lieblingsFach = "";
	
	public Student(String name, int matrikelnummer, String lieblingsFach) {
		this.name = name;
		this.matrikelnummer = matrikelnummer;
		this.lieblingsFach = lieblingsFach;
	}
	
	public String getLieblingsfach() {
		return lieblingsFach;
	}
	
	public int getMatrikelnummer() {
		return matrikelnummer;
	}

	public String getName() {
		return name;
	}

	public void setLieblingsfach(String lieblingsFach) {
		this.lieblingsFach = lieblingsFach;
	}

	public void setMatrikelnummer(int matrikelnummer) {
		this.matrikelnummer = matrikelnummer;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String toString() {
		String returnString = name + " (" + matrikelnummer + "), Lieblingsfach: " + lieblingsFach;		
		return returnString;
	}
}

Was nun ? wie gehe ich weiter voran ?

Bearbeitet von java_anfaenger
Link zu diesem Kommentar
Auf anderen Seiten teilen

Jetzt kannst du doch eine Liste von Studenten erstellen, anstatt eine Liste von String. Ein Student erzeugst du dann mit dem new-Operator:

new Student("Test", 111111, "Fach1");

Dann kannst du einfach über die Liste iterieren und pro Student die toString()-Methode aufrufen:

for(Student student : studentenDaten) {
  System.out.println(student.ToString());
}
	

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 12 Minuten schrieb Whiz-zarD:

Jetzt kannst du doch eine Liste von Studenten erstellen, anstatt eine Liste von String. Ein Student erzeugst du dann mit dem new-Operator:


new Student("Test", 111111, "Fach1");

Dann kannst du einfach über die Liste iterieren und pro Student die toString()-Methode aufrufen:


for(Student student : studentenDaten) {
  System.out.println(student.ToString());
}
	

 

Und die Map lautet so ?

 

Map<String,Integer> studentenDaten;

Map<String, Integer> datenholen = new HashMap<String, Integer>(studentenDaten);

Weil dann sagt das System..

Can only iterate over an array or an instance of java.lang.
 Iterable

 

Bearbeitet von java_anfaenger
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...