doppelte Einträge Emailempfänger...

Maxibecky

Mitglied
Hallo zusammen!

Ich habe folgendes Problem.

Ich soll ein Programm schreiben welches prüft, ob in einer Email die Empfängeradressen doppelt vorkommen.
Falls ja, muss der doppelte Eintrag gelöscht werden.
Also:
To: Empfänger1; Empfänger2; Empfänger3; Empfänger1
CC: Empfänger1; Empfänger4;

Also Empfänger1 kommt im "To:" 2 mal vor und im "CC:" aber nochmal.
"Empfänger1" eins sollte aber insgesamt nur einmal vorkommen, da er die Email ja sonst 3 mal bekommt.

Habt ihr eine Idee???

HTML:
public Email(List<String> to, List<String> cc, String from, String subject, String message, String type) {
        this.to = to;
        this.cc = cc;
        this.from = from;
        this.subject = subject;
        this.message = message;
        this.type = type;
    }

soweit ich mich jetzt nicht irre, hab ich hier mal den Konstruktor.

Ich würde vllt mit Set arbeiten oder HashMaps, da ja in Hashmaps keine doppelten Einträge vorkommen können. Weiß aber nicht genau wie ich da anfangen soll.

Für Unterstützung wär ich sehr dankbar!!!;)
 
S

SlaterB

Gast
> Weiß aber nicht genau wie ich da anfangen soll.

den String auftrennen? welch genialer Gedanke, auf den du offensichtlich nicht gekommen bist, ich fühle mich schlau ;)

wie man mit Strings arbeiten kann, suchen, substring usw. ist ein zentrales Grundlagen-Thema,
um weniger manuell zu arbeiten gibt es Scanner, StringTokenizer, split()-Methode,
zu allem bitte erstmal lesen/ lernen
 

faetzminator

Gesperrter Benutzer
Habs nicht getestet, aber dieses Codesnippet sollte tun, was du willst:
Java:
public <T> void removeMultipleEntries(List<T>... lists) {
    Set<T> cachedContent = new HashSet<T>();
    for (List<T> list : lists) {
        Set<T> content = new LinkedHashSet<T>(list);
        content.removeAll(cachedContent);
        cachedContent.addAll(content);
        list.clear();
        list.addAll(content);
    }
}

Einfach mit [c]removeMultipleEntries(to, cc)[/c] aufrufen - die Reihenfolge ist relevant.
 

AquaBall

Top Contributor
PseudoCode:
Java:
for (i=0; i<toAnzahl;++i) {
  for (j=i; j<toAnzahl;++j) {
     if (toAdresse[i]==toAdresse[j]) lösche(toAdresse[j]);
  }
  for (j=0; j<ccAnzahl;++j) {
     if (toAdresse[i]==ccAdresse[j]) lösche(ccAdresse[j]);
  }
}
for (i=0; i<ccAnzahl;++i) {
  for (j=i; j<ccAnzahl;++j) {
     if (ccAdresse[i]==ccAdresse[j]) lösche(ccAdresse[j]);
  }
}
 

Maxibecky

Mitglied
Habs nicht getestet, aber dieses Codesnippet sollte tun, was du willst:
Java:
public <T> void removeMultipleEntries(List<T>... lists) {
    Set<T> cachedContent = new HashSet<T>();
    for (List<T> list : lists) {
        Set<T> content = new LinkedHashSet<T>(list);
        content.removeAll(cachedContent);
        cachedContent.addAll(content);
        list.clear();
        list.addAll(content);
    }
}

Einfach mit [c]removeMultipleEntries(to, cc)[/c] aufrufen - die Reihenfolge ist relevant.

fein! Danke!:) ich werds mal versuchen.
 

faetzminator

Gesperrter Benutzer
@AquaBall: öhm dein Code ist aber etwas sehr ...
1. Vergleicht man Strings mit [c]equals()[/c]
2. Verwendest du deutsche Variablennamen, und würde das nicht genügen, noch Umlaute
3. Du beginnst mit [c]j = i[/c], obwohl das eher [c]j = i + 1[/c] ist
4. Das Konzept geht eh nicht auf, bzw. ist mit vielen Handständen verbunden...
 

AquaBall

Top Contributor
Danke. Dass du mich persönlich ansprichst.
Ich bin an persönlicher konstruktiver Kritik immer interessiert.

Code:
öhm dein Code ist aber etwas sehr ...
... ist etwas sehr Pseudocode. Steht ja dabei.
Code:
1. Vergleicht man Strings mit [c]equals()[/c]
... abder nicht wenn man nur die Logik darstellen will.
Code:
2. Verwendest du deutsche Variablennamen, und würde das nicht genügen, noch Umlaute
... ist dir noch gar nicht aufgefallen, dass das problemlos geht.
Übrigens, auch wenn ich spreche klingt das deutsch, und was du schreibst is german too, is'nt it?
Code:
3. Du beginnst mit [c]j = i[/c], obwohl das eher [c]j = i + 1[/c] ist
Danke für den Tipp. Man sieht, du hast den PseudeCode doch kapiert.
Ach da fällt mir auf, dass ich lösche() gar nicht definiert habe.
Code:
4. Das Konzept geht eh nicht auf, bzw. ist mit vielen Handständen verbunden...
... aber zeigt auf was pasiert, ohne abstrakte Daten verstehen zu müssen.
Und immerhin ist er anscheinend Anfänger.

PS: wenn wir hier schon Code-Battle spielen:
Java:
public <T> void removeMultipleEntries(List<T>... lists) {...}
Was meinst du mit
Code:
public <T> void
?
 
S

SlaterB

Gast
== statt equals() ist ein wichtiger Fehler, den zwar durchaus jeder mal lernen sollte (und am besten lernt man auf dem harten Fehler-Weg),
aber zu spaßen ist damit ganz bestimmt nicht, jegliche Art von derartigen Pseudo-Code wäre fraglich,
hier bei Java-Code-Tags und direkt kopierbaren Java-Code besonders kritisch

das ist nicht gut, zumindest aus meiner Sicht, falls das einer der beiden Ansichts-Seiten irgendeine Art von Gewicht gibt ;)

> Was meinst du mit public <T> void ?
so gehen doch generische Methoden?
 

faetzminator

Gesperrter Benutzer
... ist dir noch gar nicht aufgefallen, dass das problemlos geht.
Umlaute funktionieren tatsächlich, solange man immer das gleiche Encoding verwendet. Man muss aber beachten, dass man dann auf allen Maschinen UTF-8 o.ä. verwendet (insbesondere, wenn man *nix und Windows "mischt").
Übrigens, auch wenn ich spreche klingt das Deutsch, und was du schreibst is german too, is'nt it?
Es gibt IMHO zwei Gründe, den Code komplett in Englisch zu halten:
1. Konventionen wie Getter und Setter, eine sprachgemischte Methode gefällt mir nicht so ([c]setVorname()[/c], [c]getVorname()[/c] etc.).
2. Die Java SE API ist in englisch gehalten. Ebenso wie alle Libs, die ich bis anhin verwendete. Davon ausgegangen, dass dein Argument wär, dass der Entwickler kein Englisch kann: bringt ihm nicht viel, wenn der eigene Code in "Pseudo"-Deutsch (eben z.B. Getter und Setter) gehalten würde.
[...] du hast den PseudeCode doch kapiert.
Klar ;)
... aber zeigt auf was pasiert, ohne abstrakte Daten verstehen zu müssen.
Die Problematik besteht darin, dass man in Löschen das Array in ein neues kopieren und wieder zurückgeben müsste. Zusätzlich müssen noch die Iteratoren angepasst werden. Ich würde also zumindest eine List an Stelle eines Arrays bevorzugen :)

PS: wenn wir hier schon Code-Battle spielen:
Java:
public <T> void removeMultipleEntries(List<T>... lists) {...}
Was meinst du mit
Code:
public <T> void
?
Hehe :D Wenn du Generics auf Klassenebene verwendest (wie z.B. [c]List<T>[/c]), dann wird dies im Klassenheader deklariert. Wenn eine Methode generische Typen verwendet, die nicht auf Klassenlevel definiert wurden, muss man das selbst machen. Dies wird vor dem Return Type gemacht.
Schlussendlich ziehlen diese Generics darauf ab, dass der Typ mir zwar egal ist (in diesem Fall String) aber alle Lists den gleichen Typen besitzen sollen.
 

AquaBall

Top Contributor
Ok.
War mal ein Anlass wieder Galileo aufzuschlagen. Ich hab in der Tat noch nie eine generic selbst erstellt.
Hab ich glatt was dazu gelernt. Danke sehr. Aber ich verspreche dir, sie wird heißen:
Code:
public <T> void neueKlasse()
und nicht
Code:
public <T> void newClass()

PS: Umlaute verwende ich eigentlich auch nie, nur im Pseudocode.
und mit equals rennst du offene Türen ein. War ja nur Pseudocode!!
 
Zuletzt bearbeitet:

Maxibecky

Mitglied
sorry faetzminator, deine lösung ist mir vllt doch ein wenig zu komplex. gibt es hierzu vllt auch ne einfachere lösung?

Java:
public <T> void removeMultipleEntries(List<T>... lists) {
    Set<T> cachedContent = new HashSet<T>();
    for (List<T> list : lists) {
        Set<T> content = new LinkedHashSet<T>(list);
        content.removeAll(cachedContent);
        cachedContent.addAll(content);
        list.clear();
        list.addAll(content);
}
}
 

AquaBall

Top Contributor
Naja eigentlich hat er es schön vorbereitet.

Du must nur seine Methode 1:1 in deinen Code copieren, und im Hauptprogramm mit
Code:
removeMultipleEntries(to, cc)
aufrufen. Schreibt er eh genau.

Das einzige was du noch selbst machen musst, ist deine Adressen in zwei List<...> to und cc rein zu bringen.
Das ist halt der entscheidende Punkt. Der Typ der Listen ist da bei egal. Z.B. List<String> oder List<MyMailClass>, ...

Schaffst du das?
 
Zuletzt bearbeitet:

Maxibecky

Mitglied
Naja eigentlich hat er es schön vorbereitet.

Du must nur seine Methode 1:1 in deinen Code copieren, und im Hauptprogramm mit
Code:
removeMultipleEntries(to, cc)
aufrufen. Schreibt er eh genau.

Das einzige was du noch selbst machen musst, ist deine Adressen in zwei List<...> to und cc rein zu bringen.
Das ist halt der entscheidende Punkt.

Schaffst du das?

ich versuchs mal :) Danke!
 

faetzminator

Gesperrter Benutzer
sorry faetzminator, deine lösung ist mir vllt doch ein wenig zu komplex. gibt es hierzu vllt auch ne einfachere lösung?

Es gibt andere Lösungen - z.B. die drei Schleifen (wobei das dann auf 2 Lists begrenzt wird, und meine Version beliebig viele Lists bearbeiten kann). Aber wie definierst du "einfacher"? Etwas schöneres fällt mir nicht ein ;)

Das einzige was du noch selbst machen musst, ist deine Adressen in zwei List<...> [...]

Hat er doch bereits ;)
Java:
public Email(List<String> to, List<String> cc, [...]) {

Edit: mir doch wurst, ob sie, er, es... Im Zweifelsfall soll dann "er" als "der TO" stehen.
 
Zuletzt bearbeitet:

Maxibecky

Mitglied
Es gibt andere Lösungen - z.B. die drei Schleifen (wobei das dann auf 2 Lists begrenzt wird, und meine Version beliebig viele Lists bearbeiten kann). Aber wie definierst du "einfacher"? Etwas schöneres fällt mir nicht ein ;)



Hat er doch bereits ;)


Edit: mir doch wurst, ob sie, er, es... Im Zweifelsfall soll dann "er" als "der TO" stehen.

Java:
public Email(List<String> to, List<String> cc, String from, String subject, String message, String type) {
        this.to = to;
        this.cc = cc;
        this.from = from;
        this.subject = subject;
        this.message = message;
        this.type = type;
    }

also so
 

faetzminator

Gesperrter Benutzer
Maxibecky, kannst du bitte Doppelposts vermeiden? Es gibt einen Edit-Button für neuere Posts (AFAIK <1h).

Ich hab nur gesagt, dass du diese zwei Listen bereits hast und lediglich im Konstruktor meine Methode aufrufen müsstest, falls du das denn willst.
 

AquaBall

Top Contributor
[OT]Zählt das als Doppelpost?[/OT]


Du must es "irgendwo" für deien beiden Listen einabuen.
Nachdem diese in der Klasse existieren, ist es sinnvoll die Routine dort einzubauen.
Aber eine Klasse IST noch kein Konstruktor!
Ob du es im Konstruktor machst, oder als eigene Methode, hängt von deiner Anwendung ab.
 

Maxibecky

Mitglied
ja, das ist mir schon klar, dass ne Klasse kein Konstruktor ist ;)

ich hab eine Klasse Email.java, eine EmailUtils.java und EmailUtilsTest.java

Java:
public class EmailUtils {

    public static Email processAdresses(Email email) {
        
        
        return email;
    }

    public <T> void removeMultipleEntries(List<T>... lists) {  
        Set<T> cachedContent = new HashSet<T>(); 
        for (List<T> list : lists) {    
            Set<T> content = new LinkedHashSet<T>(list); 
            content.removeAll(cachedContent);
            cachedContent.addAll(content);
            list.clear();
            list.addAll(content);   
        }
    }
}

public class EmailUtilsTest {

    @Before
    public void setUp() throws Exception {
    }

    @Test
    public void test() {
        
        Email email = new Email();
        
        email = EmailUtils.processAdresses (email);
        
        assertNotNull("email must be not null!", email);
        
    }

 @Test
    public void test1() {
        
        removeMultipleEntries(to, cc);
        
    }

bei test1 hakt es irgendwie. test() läuft durch. macht ja auch nichts bestimmtes
 

timbeau

Gesperrter Benutzer
Das es bei test1 "irgendwie" hakt ist ja auch logisch. Woher kommt denn dein "to, cc"? Hast du die Listen der Mailadressen eingelesen?

Setz dich mal ne Stunde damit auseinander anstatt im Forum im Minutentakt Fragen zu stellen deren Antworten dich nicht wirklich weiterbringen.
 

Maxibecky

Mitglied
du ist nicht meine absicht hier irgendwen zu nerven. ich checks nur eben grad einfach nicht. deswegen frag ich ja.

Zudem hab ich jetzt grad mit test1() erst angefangen so wie weit ich jetzt eben bin.
 
Zuletzt bearbeitet:

timbeau

Gesperrter Benutzer
Dann schreib das DIng doch erstmal fertig. "Hakt es irgendwie" ist KEINE Fehlerbeschreibung!

Eine vernünftige IDE würde dir die Fehler auch zeigen.
 

AquaBall

Top Contributor
Viel deutlicher, als die bisherigen Posts kanns nun wirklich fast nicht werden.

Lies nochmal alles durch, und denk nach was du davon nicht verstehst!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S CSV auf doppelte Einträge überprüfen Java Basics - Anfänger-Themen 8
E Array doppelte Einträge Java Basics - Anfänger-Themen 2
S Variablen Array in ArrayList auf doppelte Einträge überprüfen Java Basics - Anfänger-Themen 4
P Doppelte Einträge in eine List Java Basics - Anfänger-Themen 5
C Doppelte Einträge aus String [] Array entfernen. Java Basics - Anfänger-Themen 5
G txt-File als DB>doppelte Einträge verhindern/Suche/... Java Basics - Anfänger-Themen 10
P Doppelte Einträge in mehreren Textfiles finden und ausgeben Java Basics - Anfänger-Themen 8
J doppelte Einträge in einem Array Java Basics - Anfänger-Themen 7
-horn- Doppelte Einträge entfernen, aus Array, List oder sonstwas Java Basics - Anfänger-Themen 9
G _NUR_ doppelte Einträge in einem Array behalten Java Basics - Anfänger-Themen 3
G doppelte Einträge im String Array löschen Java Basics - Anfänger-Themen 21
0 ArrayList - doppelte Einträge entfernen? Java Basics - Anfänger-Themen 9
S Methode, um doppelte Einträge in Array zu finden Java Basics - Anfänger-Themen 5
G Wie doppelte Einträge in ComboBox vermeiden ? Java Basics - Anfänger-Themen 9
M Doppelte Einträge in einer datei löschen(nach timestamp)! Java Basics - Anfänger-Themen 4
D Doppelte Einträge einer Liste löschen Java Basics - Anfänger-Themen 6
B 2 ELists vergleichen und doppelte Einträge löschen Java Basics - Anfänger-Themen 11
K Warum werden immer noch doppelte Zahlen ausgegeben ? Java Basics - Anfänger-Themen 13
XWing Doppelte Zahlen im Array Java Basics - Anfänger-Themen 8
P Doppelte werte in einer Liste zählen Java Basics - Anfänger-Themen 11
D Doppelte For Schleife / Array Java Basics - Anfänger-Themen 3
C das Doppelte des Wertes in der Console ausgeben Java Basics - Anfänger-Themen 10
tom.j85 Doppelte Foreach Schleife: Am Ende wird immer das Gleiche Objekt eingefügt Java Basics - Anfänger-Themen 4
H Größte Duplikat (Größte Doppelte Wert) eines Arrays ausgeben Java Basics - Anfänger-Themen 9
X Threads Zwei Threads, aber doppelte Ausgabe verhindern (synchronized) Java Basics - Anfänger-Themen 54
H Frage zur ermittlung eines doppelte Paars aus Sotieralgorithmus Java Basics - Anfänger-Themen 4
N Best Practice Doppelte und einfach Anführungsstriche in Runtime.getruntime().exec() Java Basics - Anfänger-Themen 6
J Doppelte Ausgabe erzeugen Iterator Java Basics - Anfänger-Themen 6
L Doppelte Schleife Anpassen Java Basics - Anfänger-Themen 5
W Map doppelte Values löschen Java Basics - Anfänger-Themen 3
S Doppelte Liste Einfügen Java Basics - Anfänger-Themen 1
M Argument in Integer verwandeln und das Doppelte davon printen Java Basics - Anfänger-Themen 9
T Klassen Doppelte Elemente aus Container entfernen Java Basics - Anfänger-Themen 6
M Erste Schritte Doppelte Ausgabe? (JList) Java Basics - Anfänger-Themen 1
kilopack15 Array auf doppelte Elemente überprüfen Java Basics - Anfänger-Themen 16
S Input/Output Doppelte Input-Abfrage Java Basics - Anfänger-Themen 3
K Input/Output Doppelte Ausgabe Java Basics - Anfänger-Themen 5
S Erste Schritte Doppelte Ausführung? Java Basics - Anfänger-Themen 4
E Threads Doppelte Threads beenden Java Basics - Anfänger-Themen 4
J Variablen Doppelte Werte in Int Array Java Basics - Anfänger-Themen 10
D Java doppelte Zahlen auch über 10 in einem String entfernen Java Basics - Anfänger-Themen 2
D Java doppelte Zahl/Zeichen in einem String entfernen Java Basics - Anfänger-Themen 6
S ArrayList Gruppieren, "Doppelte Werte" Addieren Java Basics - Anfänger-Themen 5
O Doppelte For-Scheife Java Basics - Anfänger-Themen 6
M Einfache und Doppelte Operatoren Java Basics - Anfänger-Themen 3
P Doppelte Datensätze aus CSV-Datei löschen Java Basics - Anfänger-Themen 17
B Doppelte Werte aus Array entfernen ohne Import - Algorithmus Java Basics - Anfänger-Themen 5
S Array befüllen & auf doppelte werte prüfen Java Basics - Anfänger-Themen 6
B Klassen Doppelte werte Filtern XML, Datenbank und DOM Java Basics - Anfänger-Themen 3
R Doppelte löschen Java Basics - Anfänger-Themen 6
K Doppelte namen bei random Java Basics - Anfänger-Themen 3
U Doppelte Interfcae Implementierung Java Basics - Anfänger-Themen 10
DerGroßeNargus Doppelte Liste initialisieren Java Basics - Anfänger-Themen 2
H Datentypen Doppelte Verkette Liste - Verständnissproblem Java Basics - Anfänger-Themen 5
T Doppelte Liste Java Basics - Anfänger-Themen 8
R Schleife Doppelte Daten löschen Java Basics - Anfänger-Themen 3
V Doppelte Zahl suchen Java Basics - Anfänger-Themen 14
L Hilfe, doppelte Zufallszahlen Java Basics - Anfänger-Themen 13
G List suchen und doppelte rausfiltern Java Basics - Anfänger-Themen 3
T Doppelte Anführungszeichen ersetzen?? Java Basics - Anfänger-Themen 4
Luk10 Doppelte for-schleife Java Basics - Anfänger-Themen 7
T Array: Doppelte Charakteren löschen - Ein Lösungsversuch Java Basics - Anfänger-Themen 37
P doppelte Werte im Array ausgeben. Java Basics - Anfänger-Themen 4
M Aufgabe: Array auf doppelte Zahl prüfen Java Basics - Anfänger-Themen 8
J Doppelte Integer aus einem Array entfernen - seltsames Prob. Java Basics - Anfänger-Themen 5
C Doppelte Punktnotation Java Basics - Anfänger-Themen 2
F doppelte Elemente in HashSet Java Basics - Anfänger-Themen 5
G java.util.LinkedList: Doppelte Elemente vermeiden Java Basics - Anfänger-Themen 5
S "doppelte" if-Anweisung Java Basics - Anfänger-Themen 10
G Doppelte (Paar) Werte in einem Vektor finden Java Basics - Anfänger-Themen 6
F Doppelte Datensätze zusammenziehen Java Basics - Anfänger-Themen 2
V Doppelte Zahlen bei Lotto verhindern Java Basics - Anfänger-Themen 11
N ResultSet auf Einträge überprüfen Java Basics - Anfänger-Themen 5
R While-Loop der die Einträge eines Arrays in umgekehrter Reihenfolge anzeigt Java Basics - Anfänger-Themen 3
C Erste Schritte JComboBox Einträge auf Duplikat prüfen Java Basics - Anfänger-Themen 4
A Einträge aus Tupeln nach Regeln in Liste speichern Java Basics - Anfänger-Themen 8
K Datentypen Einträge zweier Matrizen vergleichen Java Basics - Anfänger-Themen 4
I Einträge in den Konstruktor Java Basics - Anfänger-Themen 3
S Problem: Array alle Einträge gleich Java Basics - Anfänger-Themen 10
M Erste Schritte JList einträge Java Basics - Anfänger-Themen 1
P Erste Schritte Einträge aus verschachtelter Map chronoligisch ausgeben Java Basics - Anfänger-Themen 5
C JList Einträge nach Datum sortieren Java Basics - Anfänger-Themen 3
T Einträge in jComboBox aus Liste übernehmen Java Basics - Anfänger-Themen 1
S Wie bestehende Excel-Einträge mit neuen Vergleichen (mit Apache POI)? Java Basics - Anfänger-Themen 0
T Alte Einträge im Array werden von neuen überschrieben Java Basics - Anfänger-Themen 5
D Javaliste auf gleiche Einträge überprüfen Java Basics - Anfänger-Themen 2
C Datentypen Array-Einträge überhalb der Array-Länge - welcher Wert? Java Basics - Anfänger-Themen 5
L Erste Schritte Einträge in ArrayList prüfen Java Basics - Anfänger-Themen 4
M Ziffer einträge vergrößern Java Basics - Anfänger-Themen 16
H Einträge aus Array löschen Java Basics - Anfänger-Themen 8
J Markierte Einträge (Dateien) in JList sollen in einen anderen Ordner verschoben werden. Java Basics - Anfänger-Themen 12
K ArrayList.add() überschreibt vorhandene Einträge. Java Basics - Anfänger-Themen 12
M Gewisse Einträge aus einer ArrayList löschen Java Basics - Anfänger-Themen 3
K ArrayList Zugreifen auf Einträge Java Basics - Anfänger-Themen 8
B 2D-Array, gleiche Einträge prüfen Java Basics - Anfänger-Themen 5
F Hiberate-Log-Einträge Java Basics - Anfänger-Themen 2
J Datentypen List - gleiche Einträge bei neuen Objekten Java Basics - Anfänger-Themen 31
Beckenbauer OOP Durch Komma getrennte Einträge in einem String in ein Array oder eine Tabelle schreiben Java Basics - Anfänger-Themen 4
kitz Mehrere Einträge auswerfen? Java Basics - Anfänger-Themen 20
E Darstellung der Choice Einträge Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben