Elemente aus einer Liste in eine HashMap(?)

11/30/2017 11:34 #Saiirex#1
Hey, folgendes "Problem":

Ich habe eine Liste mit x Elementen (könnten tausende, hunderte oder auch Millionen sein) das Element ist "User" (hat z.B. ein Feld "Username" und eins "Datum").

Beispiel:

User1 ("name1", "01.01.2017")
User2 ("name2", "01.01.2017")
User3 ("name3", "01.01.2017")
User4 ("name4", "03.01.2017")
User4 ("name5", "03.01.2017")
User4 ("name6", "07.01.2017")

Nun möchte ich darauß eine HashMap machen (Bin mir nicht sicher ob das der richtige Typ ist, in C# würde ich ein Dictionary nehmen), die so aufgebaut ist:
Eintrag 1: ("01.01.2017", 3)
Eintrag 2: ("03.01.2017", 2)
Eintrag 3: ("07.01.2017", 1)

Also mit Worten erklärt: Ich möchte zählen wie oft das Datum drin ist und das mit dem Speichern.

Wie genau löst man sowas? Mit zwei Schleifen? In C# würde ich einfach Lambda Anweisung nutzen, soweit ich weiß gibt es sowas in Java nicht.
11/30/2017 11:54 Serraniel#2
Bin mir nicht sicher ob ich richtig verstanden habe was du wolltest. Ziel ist also am Ende die Information zu haben welches Datum wie oft vorkommt? Wenn ja wäre ne HashMap<DateTime, Integer> der way to go und würde in etwa so gehen:

PHP Code:
HashMap<DateTimeIntegermap = new HashMap<>();
for(
item : list) {
  
map[item.getDate()]++;

Ist so semi pseudo Code weil ich jetzt auch länger nicht mehr mit Java gearbeitet hab und auf Arbeit sitze. Das ++ wird wahrscheinlich nicht gehen wenn das Datum das erste Mal vorkommt, weil das null sein wird (Java ist toll :kappa:) und [] Zugriff wird wahrscheinlich auch eher über getter und setter auf der Map laufen weil Operatoren in Java.....Hoffe aber als Ansatz so war das gerade spontan ausreichend :o
11/30/2017 12:08 #Saiirex#3
Quote:
Originally Posted by Serraniel View Post
Bin mir nicht sicher ob ich richtig verstanden habe was du wolltest. Ziel ist also am Ende die Information zu haben welches Datum wie oft vorkommt? Wenn ja wäre ne HashMap<DateTime, Integer> der way to go und würde in etwa so gehen:

PHP Code:
HashMap<DateTimeIntegermap = new HashMap<>();
for(
item : list) {
  
map[item.getDate()]++;

Ist so semi pseudo Code weil ich jetzt auch länger nicht mehr mit Java gearbeitet hab und auf Arbeit sitze. Das ++ wird wahrscheinlich nicht gehen wenn das Datum das erste Mal vorkommt, weil das null sein wird (Java ist toll :kappa:) und [] Zugriff wird wahrscheinlich auch eher über getter und setter auf der Map laufen weil Operatoren in Java.....Hoffe aber als Ansatz so war das gerade spontan ausreichend :o
Ist hilfreich, danke :D. Ich probiere mal rum und gebe dann Rückmeldung

Edit:

So hat es funktioniert:
PHP Code:
HashMap<StringIntegerdateCountMap = new HashMap<>();

        for(
LinkedAccountFollower follower lastAddedFollower){
            if(
dateCountMap.containsKey(follower.getAddedDate())){
                
int count dateCountMap.get(follower.getAddedDate());
                
count++;
                
dateCountMap.replace(follower.getAddedDate(), count);
            }
            else{
                
dateCountMap.put(follower.getAddedDate(), 1);
            }
        }