2017-05-30 3 views
1

Dies ist die Klasse MonitoredData:Wie kann ich eine Map vom Typ Map <Integer, Map <String, Integer >> in Java 8 erstellen?

class MonitoredData { 

    public MonitoredData (DateTime startTime, DateTime endTime, String activity){ 
     this.startTime = startTime; 
     this.endTime = endTime; 
     this.activity = activity; 
    } 

    public DateTime getStartTime(){ 
     return this.startTime; 
    } 
    public DateTime getEndTime(){ 
     return this.endTime; 
    } 
    public String getActivity(){ 
     return this.activity; 
    } 

} 

Ich habe eine Methode, das eine Liste von MonitoredData zurückzugibt, und ich habe eine Datenstruktur vom Typ erzeugen Map<Integer, Map<String, Integer>>, die für jeden Tag des Protokolls die Aktivitätszählung enthält.

public void activitiesPerDay(List<MonitoredData> monitoredData) { 
    Map <Integer, Map<String, Integer>> map = monitoredData.stream() 
      .collect(Collectors.groupingBy(
        element -> element.getStartTime().dayOfMonth()), 
        Collectors.mapping(mapper, downstream) 
        ); 
} 
+2

Mögliches Duplikat von [Java-Stream-Filter Summe der Werte] (https://StackOverflow.com/questions/44101297/java-stream-filter-sum-of-values) – Eugene

Antwort

1

Es sieht aus wie Sie eine verschachtelte groupingBy brauchen - zuerst von Tag des Monats und dann durch Aktivität:

Map<Integer, Map<String, Long>> map = 
    monitoredData.stream() 
       .collect(Collectors.groupingBy (
         e -> e.getStartTime().dayOfMonth(), 
         Collectors.groupingBy(MonitoredData::getActivity, 
              Collectors.counting()))); 

Beachten Sie, dass der Ausgabetyp ist Map<Integer, Map<String, Long>> statt Map<Integer, Map<String, Integer>>, da ich Collectors.counting() bin mit , die zurückgibt.

Sie können Collectors.summingInt(e -> 1) anstelle von Collectors.counting() verwenden, um eine Integer Anzahl zu erhalten, die Ihnen den Map<Integer, Map<String, Integer>>-Ausgang gibt.

+0

Vielen Dank! Nun muss ich eine Datenstruktur der Form Map erstellen, die für jede Aktivität die gesamte über den Überwachungszeitraum berechnete Dauer abbildet und die Aktivitäten mit einer Gesamtdauer von mehr als 10 Stunden filtert – yuyu

Verwandte Themen