Person in einer Arraylist hinzugügen mit Prüfung ?

Diskutiere Person in einer Arraylist hinzugügen mit Prüfung ? im Allgemeine Java-Themen Bereich.
M

MiMa

In meiner Methode splitte ich die Namen von Autoren durch ein trennzeichen welches als Variable deklariert ist, weil es auch schon mal abweichen kann.
Die Methode funktioniert soweit ganz gut bis auf die Prüfung ob der Autor in der Liste bereits vorhanden ist.
Ich möchte den Vornamen Nachname, und den boolschen Wert erst hinzufügen wenn die der Vor -und Nachname nicht in der ArrayList enthalten ist.
In der Autorenliste ist trotz der Abfrage der Autor doppelt enthalten?

Java:
public void splitteAutorenName(String autorenname, String trennzeichen) throws IOException {
        String vorname = "";
        String nachname = "";
        LOG.info("Nachname und Vorname werden getrennt");
        if (autorenname.contains(trennzeichen)) {
            int ePosVN = autorenname.indexOf(trennzeichen);
            nachname = autorenname.substring(0, ePosVN);
            vorname = autorenname.substring(ePosVN + 2, autorenname.length());
            if (!listeAutoren.contains(vorname) && !listeAutoren.contains(nachname)){
                LOG.info("Der Name wird zur Autorenliste hinzugefügt");
                buchParser.addAutor(vorname, nachname, true);
            }
        } else {
            LOG.info("Es ist kein Name zu Trennen");
        }
    }
 
L

LimDul

Die Prüfung auf contains sieht falsch aus.

Contains ruft intern equals auf. Damit überprüfst du, ob in der listeAutoren ein String enthalten ist, der gleich Nachname oder gleich Vorname ist.

Ich würde mal erwarten, das der Datentyp der Liste nicht String ist. Wenn er ist nicht ist, ist es sinnvoller durch die Liste zu iteriern, z.B.

Java:
listeAutoren.stream().noneMatch(eintrag->eintrag.getVorname().equasl(vorname) || eintrag.getNachname().equals(nachname)
Außerdem sehe ich nicht, dass du irgendwo die Liste mit den autorennamen befüllst.
 
M

MiMa

Die Liste hat einen Datentyp "Person" mit Werten von
String Vorname, String Nachname, boolean autor
mit der Zeile
Java:
LOG.info("Der Name wird zur Autorenliste hinzugefügt");
buchParser.addAutor(vorname, nachname, true);
Wird der Vorname, Nachname und der boolesche Wert hinzugefügt.
Der Name darf erst der Liste hinzugefügt werden, wenn der Vorname und der Nachname nicht enthalten ist.
 
Wurstkopp

Wurstkopp

Die Variable "listeAutoren" ist also vom Typ "Person" und du prüft via contains ob diverse "String"s enthalten ist. Das würde nur gehen, wenn du die equals Methode von Person entsprechend angepasst hast.
 
M

MiMa

Ich habe das jetzt mal angepasst, aber irgendwo ist scheinbar noch ein Problem
Java:
...
enthalten = Person.prüfeAutorInListe(vorname, nachname, buchParser.getAutorenListe());
if (enthalten == false){
    LOG.info("Der Name wird zur Autorenliste hinzugefügt");
    buchParser.addAutor(vorname, nachname, true);
    }
} else {...
Java:
public static boolean prüfeAutorInListe(String vorname, String nachname, ArrayList<Person> autorenListe) {
        boolean enthalten = false;
        for(int eintrag = 0 ; eintrag < autorenListe.size(); eintrag++) {
            LOG.info("Prüfe Person Eintrag : " + eintrag + "  " + enthalten);
            if (!autorenListe.get(eintrag).getNachname().equals(nachname)
                    && !autorenListe.get(eintrag).getVorname().equals(vorname)) {
                enthalten = true;
            }
        } // preufeAutoInListe
        return enthalten;
    }
 
mihe7

mihe7

if (enthalten == false){
Schauder #1...
Java:
if (!enthalten) {
Schauder #2:
for(int eintrag = 0 ; eintrag < autorenListe.size(); eintrag++) {
Java:
for (Person autor : autorenListe) {
Dann ist Deine Bedingung falsch. Du sagst: wenn der aktuelle Autor einen anderen Nach- UND einen anderen Vornamen hat als angegeben, dann soll enthalten auf true gesetzt werden. Vermutlich willst Du, wenn der aktuelle Autor den gleichen Nach- UND Vornamen hat wie angegeben, dann soll enthalten auf true gesetzt werden:
Java:
for (Person autor : autorenListe) {
    if (autor.getNachname().equals(nachname) && 
            auto.getVorname().equals(vorname)) {
        enthalten = true;
        break;
    }
}
 
M

MiMa

Danke für die Hinweise.
Nach der Korrektur hat es dann geklappt.
Ja man sieht es immer wieder Übung, macht den Meister.
Vielen Dank.
 
Thema: 

Person in einer Arraylist hinzugügen mit Prüfung ?

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben