2016-12-04 4 views
-1

Ich habe die folgenden Daten aus DB abgerufen.Verschachtelte Mapping in Java

Date    Name  users 
-----    -------  ------ 
2016-11-23 00:00:00 aaaa  11 
2016-11-24 00:00:00 aaaa  12 
2016-11-25 00:00:00 aaaa  14 
2016-11-24 00:00:00 bbbb  21 
2016-11-26 00:00:00 bbbb  22 
2016-11-23 00:00:00 cccc  31 
2016-11-25 00:00:00 cccc  32 

die Daten entnommen von einem postgresql Verwendung GoogleAnalyticsPropertyDTO

I an einen ListSeries bewegen muß, so daß

(der Größe 11 Daten von 20-Nov bis 30-Nov für jeden Tag zu halten)

Erwartetes Ergebnis:

result[0] = new ListSeries("aaa" , new Number[] { 0,0,0,11,12,14,0,0,0,0,0}); 
result[1] = new ListSeries("bbb" , new Number[] { 0,0,0,0,21,22,0,0,0,0,0 }); 
result[2] = new ListSeries("ccc" , new Number[] { 0,0,0,31,0,32,0,0,0,0,0 }); 

versuchte ich Map<Date, GoogleAnalyticsPropertyDTO> map = new HashMap<Date, GoogleAnalyticsPropertyDTO>(); aber für jeden d nur Benutzer Wert der letzten Reihe bekommen aß. Kann mir jemand bei einer Zuordnung mit Date und dem Wert Name helfen, um eine Zuordnung für meine erwartete Listenserie zu erstellen? Kann MultiMap dafür verwendet werden?

Der Code, den ich versuchte, mit

private Number[] getData(Date fromDate, Date toDate) { 
     Date from = DateUtility.getDateWithoutTime(fromDate.getTime()); 
     Date to = DateUtility.getDateWithoutTime(toDate.getTime()); 
     Number[] result; 
     int days = DateUtility.getDaysBetweenDates(from, to); 
     result = new Number[days]; 

     List<GoogleAnalyticsPropertyDTO> gaPropList = XXXXXUI.getBusinessService().getGAProperty(fromDate, toDate); 
     Map<Date, GoogleAnalyticsPropertyDTO> map = new HashMap<Date, GoogleAnalyticsPropertyDTO>(); 
     if (gaPropList != null) { 
      for (GoogleAnalyticsPropertyDTO gaProperty : gaPropList) { 
       Date dateString = gaProperty.getFromDate(); 
       map.put(dateString, gaProperty); 
      } 
      Date date; 
      for (int d = 0; d < days; d++) { 
       date = DateUtility.addNDaysToDate(from, d); 
       if (null == map.get(date)) { 
        result[d] = 0; 
       } else { 
        GoogleAnalyticsPropertyDTO a = (GoogleAnalyticsPropertyDTO) map.get(date); 
        if (null == a.getUsers()) { 
         result[d] = 0; 
        } else { 
         result[d] = a.getUsers(); 
        } 
       } 
      } 
     } 
     return result; 
    } 
+0

Zeigen Sie den Code, den Sie haben geschrieben. Ohne das können wir dir nicht wirklich helfen. –

+0

Die Karte ist so definiert, dass für jeden Schlüssel ein einzelner Wert vorhanden ist. das klingt nicht nach dem, wonach du suchst. – ChiefTwoPencils

+0

Da Mapping für mich nicht funktionierte, habe ich es in ein 2D-Array geändert. Logik, aber ich bin auch nicht in der Lage, den Namen richtig zuzuweisen .. da die Namen nicht immer gleich sind ... Es ändert sich entsprechend den Eingabedaten. –

Antwort

0

Ich glaube nicht, Ihre Karte Definition ermöglicht es Ihnen, zu tun, was Sie erwarten. Es klingt, als ob Sie die Zeilen in der Tabelle einer Datumszeichenfolge zuordnen möchten. Was Sie dann als Wert a:

Map<String, Collection<GoogleAnalyticsPropertyDTO>>

Und wenn Sie alle von ihnen durchlaufen, ordnen Sie nach dem Datum wie folgt:

map.get(dateString).add(gaProperty);