ich meine Hashmap
als wie eine globale Variable, die innerhalb meiner Klasse:HashMap Wert immer
private Map<String, CodaReportDTO> dateAndDTO = new TreeMap<>(); //hashmap for date and the dto
Also hier der Wert ein DTO
ist, die Eigenschaften hat, die ich in einer Excel füllen musste. Ich versuche, nur ein Feld (das ist numOfTxn aus dem DTO) mit dem Schlüssel (das Datum) zu füllen. Also im Grunde versuche ich, die Werte der DTO
pro Tag auszudrucken.
Dies ist meine DTO class.
Ich versuche Werte hier auf die hashmap
als solche für die Anzahl der Tage in einem Monat hinzuzufügen:
private JSONObject postDataToElasticSearchForSuccessCount(String url, String operatorID) throws IOException, JSONException, ParseException {
/*JSONObject jsonObject = elasticSearchDataReceiver.getResults(url);
//getting the number of hits
JSONObject totalHits = jsonObject.getJSONObject("hits");
Object hitsCountForSuccessCount = totalHits.get("total");
String hitCountForSuccessCount = hitsCountForSuccessCount.toString();
if (Integer.parseInt(hitCountForSuccessCount) > 0) {
codaReportDTO.setNumOfTxn(Integer.parseInt(hitCountForSuccessCount));
}
return new JSONObject(jsonObject.toString());*/
JSONObject updatedJsonObject = null;
String jsonBody;
String monthName = Month.of(Integer.parseInt(excelMonth)).name();
int numberOfDaysInAMonth = Utilities.getNumberOfDaysForMonth(Integer.parseInt(excelYear), monthName);
//iterate over the month
for (int i = 1; i < numberOfDaysInAMonth; i++) {
String day = appendZeroToDay(i);
excelDateMonth = day + "-" + excelMonth;
Date excelMonthOriginal = new SimpleDateFormat("dd-MM").parse(excelDateMonth);
String formattedDate = String.valueOf(excelMonthOriginal);
String MonthOnly = formattedDate.substring(4, 7);
String DateOnly = formattedDate.substring(8, 10);
String dateAndMonthFinal = DateOnly + "-" + MonthOnly;
excelDateMonth = dateAndMonthFinal;
String input = "{ \n" +
" \"query\":{ \n" +
" \"query_string\":{ \n" +
" \"query\":\"api:\\\"smsmessaging\\\" AND operatorid:" + operatorID + " AND transactionOperationStatus:\\\"\\\" AND responsecode:(200 201) AND year:" + excelYear + " AND month:" + excelMonth + " AND day:" + day + "\"\n" +
" }\n" +
" },\n" +
" \"aggs\":{ \n" +
" \"total\":{ \n" +
" \"terms\":{ \n" +
" \"field\":\"userid\"\n" +
" },\n" +
" \"aggs\":{ \n" +
" \"grades_count\":{ \n" +
" \"value_count\":{ \n" +
" \"script\":\"doc['userid'].value\"\n" +
" }\n" +
" }\n" +
" }\n" +
" }\n" +
" }\n" +
"}\n";
jsonBody = input;
JSONObject jsonObject = elasticSearchDataReceiver.getResult(url, jsonBody);
JSONObject totalHits = jsonObject.getJSONObject("hits");
Object hitsCountForSuccessCount = totalHits.get("total");
String hitCountForSuccessCount = hitsCountForSuccessCount.toString();
int hitCount = Integer.parseInt(hitCountForSuccessCount);
if (hitCount > 0) {
updatedJsonObject = jsonObject;
codaReportDTO.setNumOfTxn(hitCount);
dateAndDTO.put(dateAndMonthFinal, codaReportDTO);
}
}
return updatedJsonObject;
}
Der hashmap Teil an der Unterseite des obigen Schnipsel Zugabe ist:
DatumAndDTO.put (dateAndMonthFinal, codaReportDTO);
Der Schlüssel und der Wert kommen korrekt in der obigen Zeile. Wenn es jedoch versucht, den Wert für den neuen Schlüssel zu aktualisieren, ersetzt es die anderen Werte der Schlüssel, die Werte mit dem neuen Wert haben. Wo gehe ich falsch?
Ich habe dies für den ganzen Tag versucht, nachdem ich hier in der SO in andere Frage ging, aber immer noch nicht durchkommen konnte. Jede Hilfe könnte geschätzt werden.
verwenden 'es ersetzt die anderen Werte der anderen Schlüssel, die Werte auf den neuen Wert haben 'Ich bin mir nicht sicher Ich verstehe diesen Teil. Können Sie genauer erklären, was genau passiert? –
Wo ist die Instantiierung von codaReportDTO? Könnte es sein, dass Sie eine Instanz für alle Werte verwenden? Dies erklärt die Symptome – aviad
@aviad Ich habe die Instanziierung global innerhalb dieser Klasse selbst gemacht: 'private CodaReportDTO codaReportDTO = new CodaReportDTO();' – Kulasangar