合併和拆分map,合併和拆分list,應用於把表格的兩行並排顯示
合併兩個map:
eg1.
public static void main(String args[])
{
Map<String, Object> map =new HashMap<String, Object>();
Map<String, Object> map1 =new HashMap<String, Object>();
map.put("1",new Integer(1));
map.put("2", new Integer(2));
map1.put("3", new Integer(3));
map1.put("4", new Integer(4));
map.putAll(map1);
System.out.println(map1);
System.out.println(map);
}
結果是:
{3=3, 4=4}
{3=3, 2=2, 1=1, 4=4}
eg2
HashMap map=new HashMap();
map.put("1", "A");
HashMap map1 = new HashMap();
map1.put("2", "B");
map1.put("3", "C");
map.putAll(map1);
System.out.println(map);
列印結果:
{3=C, 2=B, 1=A}
如果是如下:
HashMap map=new HashMap();
map.put("1", "A");
HashMap map1 = new HashMap();
map1.put("2", "B");
map1.put("1", "C");
map.putAll(map1);
System.out.println(map);
列印結果:
{2=B, 1=C}
所以說用putAll就可以合併兩個MAP,只不過如果有相同的key那麼用後面的覆蓋前面的
像下面水位這樣的表,迴圈一排顯示兩個資料的:原理還是一排顯示一個數據,”只不過這個資料裡有兩個資料“
controller裡:
//全部測站點實時資料
@RequestMapping(value = "thereal")
public ModelAndView thereal(
@RequestParam(value = "stcd", required = false, defaultValue = "") String stcd,
@RequestParam(value = "pageIndex", required = false, defaultValue = "0") Integer pageIndex,
@RequestParam(value = "pageSize", required = false, defaultValue = "10") Integer pageSize,
HttpServletRequest request, HttpServletResponse response) throws IOException {
String urlwater="http://192.168.1.15:8080/pingshan-service/data/Query1?sttp=ZZ";
String datawater=result(urlwater);
int indexdaowater=datawater.indexOf("{");
String resultdaowater=datawater.substring(indexdaowater);
String resultdaowater2=resultdaowater.replace(")","");
// 得到一個json物件
JSONObject jsObjwater = JSONObject.fromObject(resultdaowater2);
JSONArray jsonArraywater = jsObjwater.getJSONArray("data");
List<Map<String, Object>> listwater =new ArrayList();
List<Map<String, Object>> listwater1 =new ArrayList();
List<Map<String, Object>> listwater2 =new ArrayList();
List<Map<String, Object>> listwaters =new ArrayList();
//拆分json並把它分為兩個list
for(int i=0;i<jsonArraywater.size();i++){
JSONObject jobj = (JSONObject) jsonArraywater.get(i);
Map mapwater3 = new HashMap();
if(i%2==0){//把奇數個歸為一類
Map
mapwater11 = new HashMap();
String stcd1 = (String) jobj.get("stcd");
String tm1 = (String) jobj.get("tm");
Double z1 = (Double) jobj.get("z");
String stnm1 = (String) jobj.get("stnm");
mapwater11.put("stcd1", stcd1);
mapwater11.put("tm1", tm1);
mapwater11.put("z1", z1);
mapwater11.put("stnm1", stnm1);
listwater1.add(mapwater11);
}else {//把偶數個歸為一類
Map
mapwater21 = new HashMap();
String stcd2 = (String) jobj.get("stcd");System.out.println(i+"stcd2:"+stcd2);
String tm2 = (String) jobj.get("tm");
Double z2 = (Double) jobj.get("z");
String stnm2 = (String) jobj.get("stnm");
mapwater21.put("stcd2", stcd2);
mapwater21.put("tm2", tm2);
mapwater21.put("z2", z2);
mapwater21.put("stnm2", stnm2);
listwater2.add(mapwater21);
}
}
//判斷奇偶,把兩個list通過map合併為一個list
if (jsonArraywater.size() % 2 == 0) {//為偶數時
for (int j = 0; j < jsonArraywater.size() / 2; j++) {
Map mapwater = new HashMap();
mapwater.put("stcd1", listwater1.get(j).get("stcd1"));
mapwater.put("tm1", listwater1.get(j).get("tm1"));
mapwater.put("z1", listwater1.get(j).get("z1"));
mapwater.put("stnm1", listwater1.get(j).get("stnm1"));
mapwater.put("stcd2", listwater2.get(j).get("stcd2"));
mapwater.put("tm2", listwater2.get(j).get("tm2"));
mapwater.put("z2", listwater2.get(j).get("z2"));
mapwater.put("stnm2", listwater2.get(j).get("stnm2"));
listwater.add(mapwater);
}
} else {
for (int j = 0; j < (jsonArraywater.size() + 1) / 2; j++) {
if (j < (jsonArraywater.size() - 1) / 2) {//為奇數全部有資料時
Map mapwater
= new HashMap();
mapwater.put("stcd1", listwater1.get(j).get("stcd1"));
mapwater.put("tm1", listwater1.get(j).get("tm1"));
mapwater.put("z1", listwater1.get(j).get("z1"));
mapwater.put("stnm1", listwater1.get(j).get("stnm1"));
mapwater.put("stcd2", listwater2.get(j).get("stcd2"));
mapwater.put("tm2", listwater2.get(j).get("tm2"));
mapwater.put("z2", listwater2.get(j).get("z2"));
mapwater.put("stnm2", listwater2.get(j).get("stnm2"));
listwater.add(mapwater);
} else {//最後一對,一個有資料,一個沒資料
Map mapwater
= new HashMap();
mapwater.put("stcd1", "");
mapwater.put("tm1", "");
mapwater.put("z1", "");
mapwater.put("stnm1", "");
mapwater.put("stcd2",listwater2.get(j).get("stcd2"));
mapwater.put("tm2", listwater2.get(j).get("tm2"));
mapwater.put("z2", listwater2.get(j).get("z2"));
mapwater.put("stnm2",listwater2.get(j).get("stnm2"));
listwater.add(mapwater);
}
}
}
JSONObject jsonwater= new JSONObject();
jsonwater.put("data",
listwater);
JSONArray jsonArraywaters = jsonwater.getJSONArray("data");//得到list的形式
String urlrain="http://192.168.1.15:8080/pingshan-service/data/Query1?sttp=PP";
String datarain=result(urlrain);
int indexdaorain=datarain.indexOf("{");
String resultdaorain=datarain.substring(indexdaorain);
String resultdaorain2=resultdaorain.replace(")","");System.out.println("resultdaorain2"+resultdaorain2);
// 得到一個json物件
JSONObject jsObjrain = JSONObject.fromObject(resultdaorain2);
JSONArray jsonArrayrain = jsObjrain.getJSONArray("data");
String urlneilao="http://192.168.1.15:8080/pingshan-service/data/Query1?sttp=NL";
String dataneilao=result(urlneilao);
int indexdaoneilao=dataneilao.indexOf("{");
String resultdaoneilao=dataneilao.substring(indexdaoneilao);
String resultdaoneilao2=resultdaoneilao.replace(")","");
// 得到一個json物件
JSONObject jsObjneilao = JSONObject.fromObject(resultdaoneilao2);
JSONArray jsonArrayneilao = jsObjneilao.getJSONArray("data");
HashMap queryParams = new HashMap();
queryParams.put("water", jsonArraywaters);
queryParams.put("rain", jsonArrayrain);
queryParams.put("neilao", jsonArrayneilao);
return new ModelAndView("thereals", queryParams);
}
//根據介面地址獲取資料
public String result(String urls) {
String url = urls;
// 地址物件
URL webUrl = null;
try {
webUrl = new URL(url);
} catch (MalformedURLException e) {
e.printStackTrace();
}
// 建立遠端連線
HttpURLConnection conn = null;
try {
conn = (HttpURLConnection) webUrl.openConnection();
} catch (IOException e) {
e.printStackTrace();
}
// 得到輸入流
InputStream ins = null;
try {
ins = conn.getInputStream();
} catch (IOException e) {
e.printStackTrace();
}
// 字元讀取流
BufferedReader bfr = null;
try {
bfr = new BufferedReader(new InputStreamReader(ins,
"UTF-8"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
// 使用字串構造器,將讀取的每一行資料拼接起來
StringBuffer sb = new StringBuffer();
String content = null;
try {
while ((content = bfr.readLine()) != null) {
sb.append(content);
}
} catch (IOException e) {
e.printStackTrace();
}
// 關閉字元流
try {
bfr.close();
} catch (IOException e) {
e.printStackTrace();
}
// 釋放連線
conn.disconnect();
// 得到返回的字串
String data = sb.toString();
return data;
}
jsp頁面上:
<div style="position:relative;width:1000px;hight:200px;margin-left:200px;margin-top:3px;float:left; word-break:break-all;line-height: 1.5;border-style:ridge;">
<table style="width:100%;margin-left: 0px;" class="msgtable" cellspacing="1" id="listTable">
<caption style="background-color:#EEF6FE;"><center> <span style="color:#4884CE;">水位</span></center></caption>
</td>
</tr>
<tr>
<td style="width:;">
<label><span style="color:#4884CE;">測站名稱</span></label>
</td>
<td style="width:" id="tda">
<label><span style="color:#4884CE;">時間</span></label>
</td>
<td style="width:">
<label><span style="color:#4884CE;">水位(m)</span></label>
</td>
<td style="width:">
<label><span style="color:#4884CE;">測站名稱</span></label>
</td>
<td style="width:">
<label><span style="color:#4884CE;">時間</span></label>
</td>
<td style="width:">
<label><span style="color:#4884CE;">水位(m)</span></label>
</td>
</tr>
<c:forEach items="${water}" var="item" varStatus="s">
<tr>
<td>${item.stnm1}(${item.stcd1})</td><td>${item.tm1}</td><td>${item.z1}</td>//第一排第一列
<td>${item.stnm2}(${item.stcd2})</td><td>${item.tm2}</td><td>${item.z2}</td>//第一排第二列
</tr>
</c:forEach>
</table>
</div>
部分重要程式碼:
String urlwater="http://192.168.1.15:8080/pingshan-service/data/Query1?sttp=ZZ";
String datawater=result(urlwater);
int indexdaowater=datawater.indexOf("{");
String resultdaowater=datawater.substring(indexdaowater);
String resultdaowater2=resultdaowater.replace(")","");
// 得到一個json物件
JSONObject jsObjwater =
JSONObject.fromObject(resultdaowater2);
JSONArray jsonArraywater
= jsObjwater.getJSONArray("data");
List<Map<String, Object>>
listwater =new ArrayList();
List<Map<String, Object>>
listwater1 =new ArrayList();
List<Map<String, Object>>
listwater2 =new ArrayList();
List<Map<String, Object>>
listwaters =new ArrayList();
//拆分json並把它分為兩個list
for(int i=0;i<jsonArraywater.size();i++){
JSONObject jobj = (JSONObject)
jsonArraywater.get(i);
Map
mapwater3 = new HashMap();
if(i%2==0){//把奇數個歸為一類
Map mapwater11 =
new HashMap();
String stcd1 = (String)
jobj.get("stcd");
String tm1 = (String)
jobj.get("tm");
Double z1 = (Double)
jobj.get("z");
String stnm1 = (String)
jobj.get("stnm");
mapwater11.put("stcd1",
stcd1);
mapwater11.put("tm1",
tm1);
mapwater11.put("z1",
z1);
mapwater11.put("stnm1",
stnm1);
listwater1.add(mapwater11);
}else
{//把偶數個歸為一類
Map mapwater21 =
new HashMap();
String
stcd2 = (String) jobj.get("stcd");System.out.println(i+"stcd2:"+stcd2);
String tm2 = (String)
jobj.get("tm");
Double z2 = (Double)
jobj.get("z");
String stnm2 = (String)
jobj.get("stnm");
mapwater21.put("stcd2",
stcd2);
mapwater21.put("tm2",
tm2);
mapwater21.put("z2",
z2);
mapwater21.put("stnm2",
stnm2);
listwater2.add(mapwater21);
}
}
//判斷奇偶,把兩個list通過map合併為一個list
if (jsonArraywater.size()
% 2 == 0) {//為偶數時
for (int j = 0; j < jsonArraywater.size()
/ 2; j++) {
Map mapwater = new HashMap();
mapwater.put("stcd1", listwater1.get(j).get("stcd1"));
mapwater.put("tm1", listwater1.get(j).get("tm1"));
mapwater.put("z1", listwater1.get(j).get("z1"));
mapwater.put("stnm1", listwater1.get(j).get("stnm1"));
mapwater.put("stcd2", listwater2.get(j).get("stcd2"));
mapwater.put("tm2", listwater2.get(j).get("tm2"));
mapwater.put("z2", listwater2.get(j).get("z2"));
mapwater.put("stnm2", listwater2.get(j).get("stnm2"));
listwater.add(mapwater);
}
} else {
for (int j = 0; j < (jsonArraywater.size()
+ 1) / 2; j++) {
if (j < (jsonArraywater.size()
- 1) / 2) {//為奇數全部有資料時
Map mapwater =
new HashMap();
mapwater.put("stcd1", listwater1.get(j).get("stcd1"));
mapwater.put("tm1", listwater1.get(j).get("tm1"));
mapwater.put("z1", listwater1.get(j).get("z1"));
mapwater.put("stnm1", listwater1.get(j).get("stnm1"));
mapwater.put("stcd2", listwater2.get(j).get("stcd2"));
mapwater.put("tm2", listwater2.get(j).get("tm2"));
mapwater.put("z2", listwater2.get(j).get("z2"));
mapwater.put("stnm2", listwater2.get(j).get("stnm2"));
listwater.add(mapwater);
} else {//最後一對,一個有資料,一個沒資料
Map mapwater =
new HashMap();
mapwater.put("stcd1", "");
mapwater.put("tm1", "");
mapwater.put("z1", "");
mapwater.put("stnm1", "");
mapwater.put("stcd2",listwater2.get(j).get("stcd2"));
mapwater.put("tm2", listwater2.get(j).get("tm2"));
mapwater.put("z2", listwater2.get(j).get("z2"));
mapwater.put("stnm2",listwater2.get(j).get("stnm2"));
listwater.add(mapwater);
}
}
}
JSONObject jsonwater =
new JSONObject();
jsonwater.put("data", listwater);
JSONArray jsonArraywaters =
jsonwater.getJSONArray("data");//得到list的形式
queryParams.put("water", jsonArraywaters);
還有一種重要的迴圈請參考:http://blog.csdn.net/qq_23145857/article/details/51658410