我正试图使列表中的地图变得困难重重。
我有一个名为“ surveyAnsList”的列表,我希望从该列表中仅获取“ type C”数据,并将这些数据放入名为“ mapC”的映射中,并将这些映射放入JSONArray中。而且,当我这样做时,我不想在地图中放置一些空的“ answerValue”。
我的数据库就像
映射中应包含“ CompanyRegistrationNumber 987-65-43210,第2行,第3号”行中的空AnswerValue,但不应包含“ CompanyRegistrationNumber 123-45-56778,第2行,第2-6列”中的空AnswerValues。包含在地图中,因为RowNum 2的整个AnswerValues为空。
我尝试过的代码是这样的。
for(int i=0; i<surveyAnsList.size(); i++){
String answerType = surveyAnsList.get(i).getAnswerType();
String rowNum = surveyAnsList.get(i).getRowNum();
String colNum = surveyAnsList.get(i).getColNum();
String order1 = surveyAnsList.get(i).getQuestionOrder1();
String order2 = surveyAnsList.get(i).getQuestionOrder2();
String answerValue = surveyAnsList.get(i).getAnswerValue();
String companyRegistrationNumber = surveyAnsList.get(i).getCompanyRegistrationNumber();
String companyName = surveyAnsList.get(i).getCompanyName();
String[] answerTypeArr = answerType.split("\\|");
String typeCAnswer = "";
String newValue = "";
String cNum = "";
Map<String, Object> mapC = new HashMap<>();
mapC.put("questionOrder1", order1);
mapC.put("questionOrder2", order2);
mapC.put("rowNum", rowNum);
mapC.put("colNum", colNum);
mapC.put("answerValue", answerValue);
mapC.put("companyRegistrationNumber", companyRegistrationNumber);
mapC.put("companyName", companyName);
if(!jsonArrayC_TN3.contains(mapC)){
jsonArrayC_TN3.add(mapC);
}
}
当然,在这种情况下,映射包括每个空的AnswerValue。我如何实现自己想要的?
最佳答案
也许以下代码可以帮助您
Map<String, List<Integer>> nameMap = new HashMap<>(); // tore the name and index
Set<String> values = new HashSet<>(); // judge if the whole AnswerValues is null
for(int i=0; i<surveyAnsList.size(); i++){
String answerType = surveyAnsList.get(i).getAnswerType();
String rowNum = surveyAnsList.get(i).getRowNum();
String colNum = surveyAnsList.get(i).getColNum();
String order1 = surveyAnsList.get(i).getQuestionOrder1();
String order2 = surveyAnsList.get(i).getQuestionOrder2();
String answerValue = surveyAnsList.get(i).getAnswerValue();
String companyRegistrationNumber = surveyAnsList.get(i).getCompanyRegistrationNumber();
String companyName = surveyAnsList.get(i).getCompanyName();
if (!nameMap.keySet().contains(companyRegistrationNumber)) {
if(values.size() == 0 && i != 0){ // remove the null value map, stored in jsonArrayC_TN3
nameMap.get("companyRegistrationNumber").forEach(jsonArrayC_TN3::remove);
}
nameMap.put(companyRegistrationNumber, new ArrayList<>());
values = new HashSet<>();
}
if (answerValue != null) {
values.add(answerValue);
nameMap.get("companyRegistrationNumber").add(jsonArrayC_TN3.size());
}
String[] answerTypeArr = answerType.split("\\|");
String typeCAnswer = "";
String newValue = "";
String cNum = "";
Map<String, Object> mapC = new HashMap<>();
mapC.put("questionOrder1", order1);
mapC.put("questionOrder2", order2);
mapC.put("rowNum", rowNum);
mapC.put("colNum", colNum);
mapC.put("answerValue", answerValue);
mapC.put("companyRegistrationNumber", companyRegistrationNumber);
mapC.put("companyName", companyName);
if(!jsonArrayC_TN3.contains(mapC)){
jsonArrayC_TN3.add(mapC);
}
}