读书人

求个二层循环解决思路

发布时间: 2013-07-16 22:38:05 作者: rapoo

求个二层循环
Year Class Student
------------------------
2013 No1 zhangsan
2013 No1 lisi
2013 No2 wangwu
2012 No1 zhaoliu
2012 No1 tianqi


转换前JSON格式:

[{"Year":"2013","Class":"No1","Student":"zhangsan"}]

转换后按以下格式显示JSON字符串

{"info":[{"Year":"2013","ClassList":[{"Class":"No1","StudentList":[{"Student":"zhangsan"}]}]}]}


第一层循环代码如下
第二层循环如何写?


Map map1 = new HashMap();
Map map2 = new HashMap();
Map map3 = new HashMap();
Map map4 = new HashMap();
Map map5 = new HashMap();
map1.put("year", 2013);
map1.put("class", "No1");
map1.put("student", "zhangsan");
map2.put("year", 2013);
map2.put("class", "No1");
map2.put("student", "lisi");
map3.put("year", 2013);
map3.put("class", "No2");
map3.put("student", "wangwu");
map4.put("year", 2012);
map4.put("class", "No1");
map4.put("student", "zhaoliu");
map5.put("year", 2012);
map5.put("class", "No1");
map5.put("student", "tianqi");
List<Map> list = new ArrayList<Map>();
list.add(map1);
list.add(map2);
list.add(map3);
list.add(map4);
list.add(map5);
Map result = new HashMap();
List<Map> dbMapList = list;
List<Map> resultMapList = new ArrayList<Map>();
String s = new String();
for (Map dbMap : dbMapList) {
Map existMap = null;
for (Map resultMap : resultMapList) {
int newYear = (Integer) resultMap.get("year");
int oldYear = (Integer) dbMap.get("year");
if (newYear == oldYear) {
existMap = resultMap;
break;
} else {
continue;
}
}
Map classMap = new HashMap();
classMap.put("class", dbMap.get("class"));
if (existMap != null) {
List l = (List) existMap.get("ClassList");
l.add(classMap);
} else {
Map mapTmp = new HashMap();
mapTmp.put("year", dbMap.get("year"));
List<Map> classMapList = new ArrayList<Map>();


classMapList.add(classMap);
mapTmp.put("ClassList", classMapList);
resultMapList.add(mapTmp);
}
}
result.put("info", resultMapList);
JSONObject json = JSONObject.fromObject(result);
System.out.println(json.toString());













[解决办法]
用JSON的话大概是这样:
public static void main(String[] args) {
JSONObject returnJson = new JSONObject();
JSONArray yearJsonArray = new JSONArray();

JSONArray jsonArray = JSONArray.fromObject(getInitString());
List<String> yearList = getYearList(jsonArray);
for (String year : yearList) {
JSONObject yearJson = getYearJson(jsonArray, year);
yearJsonArray.add(yearJson);
}

returnJson.put("info", yearJsonArray);
System.out.println(returnJson.toString());
}

private static String getInitString() {
String rawString = "[" +
"{\"Year\":\"2013\",\"Class\":\"No1\",\"Student\":\"zhangsan\"}," +
"{\"Year\":\"2013\",\"Class\":\"No1\",\"Student\":\"lisi\"}," +
"{\"Year\":\"2013\",\"Class\":\"No2\",\"Student\":\"wangwu\"}," +
"{\"Year\":\"2012\",\"Class\":\"No1\",\"Student\":\"zhaoliu\"}," +
"{\"Year\":\"2012\",\"Class\":\"No1\",\"Student\":\"tianqi\"}" +
"]";
return rawString;
}

private static List<String> getYearList(JSONArray jsonArray) {
List<String> yearList = new ArrayList<String>();
for (Object object : jsonArray) {
JSONObject json = (JSONObject) object;
String year = json.getString("Year");
if (!yearList.contains(year))
yearList.add(year);
}
return yearList;
}

private static JSONObject getYearJson(JSONArray jsonArray, String year) {
JSONObject yearJson = new JSONObject();
JSONArray classListJsonArray = new JSONArray();



List<String> classList = getClassList(jsonArray, year);
for (String clazz : classList) {
JSONObject classJson = getClassJson(jsonArray, year, clazz);
classListJsonArray.add(classJson);
}

yearJson.put("Year", year);
yearJson.put("ClassList", classListJsonArray);
return yearJson;
}

private static List<String> getClassList(JSONArray jsonArray, String year) {
List<String> classList = new ArrayList<String>();
for (Object object : jsonArray) {
JSONObject json = (JSONObject) object;
if (year.equals(json.getString("Year"))) {
String clazz = json.getString("Class");
if (!classList.contains(clazz))
classList.add(clazz);
}
}
return classList;
}

private static JSONObject getClassJson(JSONArray jsonArray, String year, String clazz) {
JSONObject classJson = new JSONObject();
JSONArray studentListJsonArray = new JSONArray();

List<String> studentList = getStudentList(jsonArray, year, clazz);
for (String student : studentList) {
JSONObject studentJson = new JSONObject();
studentJson.put("Student", student);
studentListJsonArray.add(studentJson);
}

classJson.put("Class", clazz);
classJson.put("StudentList", studentListJsonArray);
return classJson;
}

private static List<String> getStudentList(JSONArray jsonArray, String year, String clazz) {
List<String> studentList = new ArrayList<String>();
for (Object object : jsonArray) {
JSONObject json = (JSONObject) object;
if (year.equals(json.getString("Year")) && clazz.equals(json.getString("Class"))) {
String student = json.getString("Student");
if (!studentList.contains(student))
studentList.add(student);
}
}
return studentList;
}


供参考^_^

读书人网 >J2SE开发

热点推荐