gpt4 book ai didi

java - HashMap 值被覆盖

转载 作者:行者123 更新时间:2023-11-30 07:58:48 24 4
gpt4 key购买 nike

我将我的 Hashmap 作为类中的全局变量:

private Map<String, CodaReportDTO> dateAndDTO = new TreeMap<>(); //hashmap for date and the dto

所以这里的值是一个 DTO,它具有我必须填写到 excel 中的属性。我正在尝试使用键(日期)仅填写一个字段(来自 DTO 的 numOfTxn)。所以基本上我试图每天打印出 DTO 的值。

这是我的 DTO class .

我正在尝试将值添加到 hashmap 中,作为一个月中的天数:

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;
}

hashmap 添加部分在上面代码段的底部:

dateAndDTO.put(dateAndMonthFinal, codaReportDTO);

键和值在上面的行中正确出现。但是当它尝试更新新键的值时,它会用新值替换具有值的键的其他值。我哪里错了?

在查看 SO 中的其他问题后,我已经尝试了一整天,但仍然无法通过。任何帮助都将不胜感激。

最佳答案

您对 map 的所有条目使用相同的 DTO 实例。这就是为什么,每一个变化都反射(reflect)在所有的值(value)观上。如果您不想覆盖更改,则需要为 map 的每个键创建一个新实例。

关于java - HashMap 值被覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40061950/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com