1.原list封装
package test;
import java.io.Serializable;
import java.util.Date;
/**
* Created by hongdi.ren.
*/
public class PrinterStatusLog implements Serializable{
private int id;
private int shopId;
private int deviceNumber;
private int connectStatus;
private Date statusTime;
private Date addTime;
private Date updateTime;
public int getPaperStatus() {
<span style="white-space:pre"> </span>return paperStatus;
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>public void setPaperStatus(int paperStatus) {
<span style="white-space:pre"> </span>this.paperStatus = paperStatus;
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>private int paperStatus;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getShopId() {
return shopId;
}
public void setShopId(int shopId) {
this.shopId = shopId;
}
public int getDeviceNumber() {
return deviceNumber;
}
public void setDeviceNumber(int deviceNumber) {
this.deviceNumber = deviceNumber;
}
public int getConnectStatus() {
return connectStatus;
}
public void setConnectStatus(int connectStatus) {
this.connectStatus = connectStatus;
}
public Date getStatusTime() {
return statusTime;
}
public void setStatusTime(Date statusTime) {
this.statusTime = statusTime;
}
public Date getAddTime() {
return addTime;
}
public void setAddTime(Date addTime) {
this.addTime = addTime;
}
public Date getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Date updateTime) {
this.updateTime = updateTime;
}
@Override
public String toString() {
final StringBuilder sb = new StringBuilder("PrinterStatusLog{");
sb.append("shopId=").append(shopId);
sb.append(", deviceNumber=").append(deviceNumber);
sb.append(", connectStatus=").append(connectStatus);
sb.append(", statusTime=").append(statusTime);
sb.append(", updateTime=").append(updateTime);
sb.append('}');
return sb.toString();
}
}
2.转换后的list(根据shopId&&deviceNumber相同的元素,转化为另外一个list,并且计算出connectstatus中0和1的个数,放在第二个list的offlinderimes和onlinetimes中,并保留addtime,updatetime,statusTime最近的的时间)
package test;
import java.util.Date;
/**
* Created by Administrator on 2016/5/24.
*/
public class PrinterStatusVO {
<span style="white-space:pre"> </span> private int shopId;
<span style="white-space:pre"> </span> private String shopName;
<span style="white-space:pre"> </span> private String cityName;
<span style="white-space:pre"> </span> private int deviceNumber;
<span style="white-space:pre"> </span> private Date statusTime;
<span style="white-space:pre"> </span> private Date firstTime;
<span style="white-space:pre"> </span> private Date lastTime;
<span style="white-space:pre"> </span> private int connectStatus;
<span style="white-space:pre"> </span> /**
<span style="white-space:pre"> </span> * 上线次数
<span style="white-space:pre"> </span> */
<span style="white-space:pre"> </span> private int onlineTimes;
<span style="white-space:pre"> </span> /**
<span style="white-space:pre"> </span> * 下线次数
<span style="white-space:pre"> </span> */
<span style="white-space:pre"> </span> private int offlineTimes;
<span style="white-space:pre"> </span> public int getShopId() {
<span style="white-space:pre"> </span> return shopId;
<span style="white-space:pre"> </span> }
<span style="white-space:pre"> </span> public void setShopId(int shopId) {
<span style="white-space:pre"> </span> this.shopId = shopId;
<span style="white-space:pre"> </span> }
<span style="white-space:pre"> </span> public String getShopName() {
<span style="white-space:pre"> </span> return shopName;
<span style="white-space:pre"> </span> }
<span style="white-space:pre"> </span> public void setShopName(String shopName) {
<span style="white-space:pre"> </span> this.shopName = shopName;
<span style="white-space:pre"> </span> }
<span style="white-space:pre"> </span> public int getDeviceNumber() {
<span style="white-space:pre"> </span> return deviceNumber;
<span style="white-space:pre"> </span> }
<span style="white-space:pre"> </span> public void setDeviceNumber(int deviceNumber) {
<span style="white-space:pre"> </span> this.deviceNumber = deviceNumber;
<span style="white-space:pre"> </span> }
<span style="white-space:pre"> </span> public Date getStatusTime() {
<span style="white-space:pre"> </span> return statusTime;
<span style="white-space:pre"> </span> }
<span style="white-space:pre"> </span> public void setStatusTime(Date statusTime) {
<span style="white-space:pre"> </span> this.statusTime = statusTime;
<span style="white-space:pre"> </span> }
<span style="white-space:pre"> </span> public Date getLastTime() {
<span style="white-space:pre"> </span> return lastTime;
<span style="white-space:pre"> </span> }
<span style="white-space:pre"> </span> public void setLastTime(Date lastTime) {
<span style="white-space:pre"> </span> this.lastTime = lastTime;
<span style="white-space:pre"> </span> }
<span style="white-space:pre"> </span> public Date getFirstTime() {
<span style="white-space:pre"> </span> return firstTime;
<span style="white-space:pre"> </span> }
<span style="white-space:pre"> </span> public void setFirstTime(Date firstTime) {
<span style="white-space:pre"> </span> this.firstTime = firstTime;
<span style="white-space:pre"> </span> }
<span style="white-space:pre"> </span> public int getOnlineTimes() {
<span style="white-space:pre"> </span> return onlineTimes;
<span style="white-space:pre"> </span> }
<span style="white-space:pre"> </span> public void setOnlineTimes(int onlineTimes) {
<span style="white-space:pre"> </span> this.onlineTimes = onlineTimes;
<span style="white-space:pre"> </span> }
<span style="white-space:pre"> </span> public int getOfflineTimes() {
<span style="white-space:pre"> </span> return offlineTimes;
<span style="white-space:pre"> </span> }
<span style="white-space:pre"> </span> public void setOfflineTimes(int offlineTimes) {
<span style="white-space:pre"> </span> this.offlineTimes = offlineTimes;
<span style="white-space:pre"> </span> }
<span style="white-space:pre"> </span> public String getCityName() {
<span style="white-space:pre"> </span> return cityName;
<span style="white-space:pre"> </span> }
<span style="white-space:pre"> </span> public void setCityName(String cityName) {
<span style="white-space:pre"> </span> this.cityName = cityName;
<span style="white-space:pre"> </span> }
<span style="white-space:pre"> </span> public int getConnectStatus() {
<span style="white-space:pre"> </span> return connectStatus;
<span style="white-space:pre"> </span> }
<span style="white-space:pre"> </span> public void setConnectStatus(int connectStatus) {
<span style="white-space:pre"> </span> this.connectStatus = connectStatus;
<span style="white-space:pre"> </span> }
<span style="white-space:pre"> </span> @Override
<span style="white-space:pre"> </span> public String toString() {
<span style="white-space:pre"> </span> final StringBuilder sb = new StringBuilder("PrinterStatusLogVO{");
<span style="white-space:pre"> </span> sb.append("shopId=").append(shopId);
<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span> sb.append(", deviceNumber=").append(deviceNumber);
<span style="white-space:pre"> </span> sb.append(", statusTime=").append(statusTime);
<span style="white-space:pre"> </span> sb.append(", firstTime=").append(firstTime);
<span style="white-space:pre"> </span> sb.append(", lastTime=").append(lastTime);
<span style="white-space:pre"> </span> sb.append(", onlineTimes=").append(onlineTimes);
<span style="white-space:pre"> </span> sb.append(", offlineTimes=").append(offlineTimes);
<span style="white-space:pre"> </span> sb.append('}');
<span style="white-space:pre"> </span> return sb.toString();
<span style="white-space:pre"> </span> }
<span style="white-space:pre"> </span>}
3.测试:
package test;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import net.sf.json.JSONArray;
public class ListToList {
<span style="white-space:pre"> </span>public static final SimpleDateFormat FORMAT = new SimpleDateFormat("yyyy-MM-dd");
<span style="white-space:pre"> </span>public static void main(String[] args) {
<span style="white-space:pre"> </span>List<PrinterStatusLog> list = new ArrayList<PrinterStatusLog>();
<span style="white-space:pre"> </span>PrinterStatusLog n5 = new PrinterStatusLog();
<span style="white-space:pre"> </span>n5.setShopId(1);
<span style="white-space:pre"> </span>n5.setDeviceNumber(2);
<span style="white-space:pre"> </span>n5.setConnectStatus(0);
<span style="white-space:pre"> </span>try {
<span style="white-space:pre"> </span>n5.setStatusTime(FORMAT.parse("2016-03-27"));
<span style="white-space:pre"> </span>n5.setUpdateTime(FORMAT.parse("2016-04-01"));
<span style="white-space:pre"> </span>} catch (ParseException e) {
<span style="white-space:pre"> </span>// TODO Auto-generated catch block
<span style="white-space:pre"> </span>e.printStackTrace();
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>System.out.println("转化之前n1:" + n5.toString());
<span style="white-space:pre"> </span>PrinterStatusLog n2 = new PrinterStatusLog();
<span style="white-space:pre"> </span>n2.setShopId(1);
<span style="white-space:pre"> </span>n2.setDeviceNumber(3);
<span style="white-space:pre"> </span>n2.setConnectStatus(1);
<span style="white-space:pre"> </span>try {
<span style="white-space:pre"> </span>n2.setStatusTime(FORMAT.parse("2016-03-28"));
<span style="white-space:pre"> </span>n2.setUpdateTime(FORMAT.parse("2016-03-29"));
<span style="white-space:pre"> </span>} catch (ParseException e) {
<span style="white-space:pre"> </span>// TODO Auto-generated catch block
<span style="white-space:pre"> </span>e.printStackTrace();
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>System.out.println("转化之前:"+"n2:" + n2.toString());
<span style="white-space:pre"> </span>PrinterStatusLog n3 = new PrinterStatusLog();
<span style="white-space:pre"> </span>n3.setShopId(2);
<span style="white-space:pre"> </span>n3.setDeviceNumber(4);
<span style="white-space:pre"> </span>n3.setConnectStatus(1);
<span style="white-space:pre"> </span>try {
<span style="white-space:pre"> </span>n3.setStatusTime(FORMAT.parse("2016-03-29"));
<span style="white-space:pre"> </span>n3.setUpdateTime(FORMAT.parse("2016-04-09"));
<span style="white-space:pre"> </span>} catch (ParseException e) {
<span style="white-space:pre"> </span>// TODO Auto-generated catch block
<span style="white-space:pre"> </span>e.printStackTrace();
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>System.out.println("转化之前:"+"n3:" + n3.toString());
<span style="white-space:pre"> </span>PrinterStatusLog n4 = new PrinterStatusLog();
<span style="white-space:pre"> </span>n4.setShopId(2);
<span style="white-space:pre"> </span>n4.setDeviceNumber(4);
<span style="white-space:pre"> </span>n4.setConnectStatus(1);
<span style="white-space:pre"> </span>try {
<span style="white-space:pre"> </span>n4.setStatusTime(FORMAT.parse("2016-03-30"));
<span style="white-space:pre"> </span>n4.setUpdateTime(FORMAT.parse("2016-05-01"));
<span style="white-space:pre"> </span>} catch (ParseException e) {
<span style="white-space:pre"> </span>// TODO Auto-generated catch block
<span style="white-space:pre"> </span>e.printStackTrace();
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>System.out.println("转化之前:"+"n4:" + n4.toString());
<span style="white-space:pre"> </span>PrinterStatusLog n1 = new PrinterStatusLog();
<span style="white-space:pre"> </span>n1.setShopId(1);
<span style="white-space:pre"> </span>n1.setDeviceNumber(2);
<span style="white-space:pre"> </span>n1.setConnectStatus(1);
<span style="white-space:pre"> </span>try {
<span style="white-space:pre"> </span>n1.setStatusTime(FORMAT.parse("2016-03-30"));
<span style="white-space:pre"> </span>n1.setUpdateTime(FORMAT.parse("2016-05-01"));
<span style="white-space:pre"> </span>} catch (ParseException e) {
<span style="white-space:pre"> </span>// TODO Auto-generated catch block
<span style="white-space:pre"> </span>e.printStackTrace();
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>System.out.println("转化之前:"+"n5:" + n1.toString());
<span style="white-space:pre"> </span>list.add(n1);
<span style="white-space:pre"> </span>list.add(n2);
<span style="white-space:pre"> </span>list.add(n3);
<span style="white-space:pre"> </span>list.add(n4);
<span style="white-space:pre"> </span>list.add(n5);
<span style="white-space:pre"> </span>List<PrinterStatusVO> printerStatusLogVOs = mergeList(list);
<span style="white-space:pre"> </span>for (PrinterStatusVO a : printerStatusLogVOs) {
<span style="white-space:pre"> </span>System.out.println(a.toString());
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>public static List<PrinterStatusVO> mergeList(List<PrinterStatusLog> printerStatusLogs) {
<span style="white-space:pre"> </span>HashMap<String, PrinterStatusVO> map = new HashMap<String, PrinterStatusVO>();
<span style="white-space:pre"> </span>List<PrinterStatusVO> printerStatusLogVOs = newPrinterStatusLogVOList(printerStatusLogs);
<span style="white-space:pre"> </span>for (PrinterStatusVO bean : printerStatusLogVOs) {
<span style="white-space:pre"> </span>String keyStr = String.valueOf(bean.getShopId()) + String.valueOf(bean.getDeviceNumber());
<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span>if (map.containsKey(keyStr)) {
<span style="white-space:pre"> </span>bean.setStatusTime(map.get(keyStr).getStatusTime().compareTo(bean.getStatusTime()) == 1
<span style="white-space:pre"> </span>? map.get(keyStr).getStatusTime() : bean.getStatusTime());
<span style="white-space:pre"> </span>System.out.println("状态:"+bean.getConnectStatus());
<span style="white-space:pre"> </span>if (bean.getConnectStatus() == PrintStatusCode.ONLINE) {
<span style="white-space:pre"> </span>if (map.get(keyStr).getFirstTime() == null) {
<span style="white-space:pre"> </span>bean.setFirstTime(bean.getFirstTime());
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>if (bean.getFirstTime() == null) {
<span style="white-space:pre"> </span>bean.setFirstTime(map.get(keyStr).getFirstTime());
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>if (map.get(keyStr).getFirstTime() != null && bean.getFirstTime() != null) {
<span style="white-space:pre"> </span>bean.setFirstTime(map.get(keyStr).getFirstTime().compareTo(bean.getFirstTime()) == 1
<span style="white-space:pre"> </span>? bean.getFirstTime() : map.get(keyStr).getFirstTime());
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>//问题找到
<span style="white-space:pre"> </span>bean.setLastTime(map.get(keyStr).getLastTime());
<span style="white-space:pre"> </span>} else {
<span style="white-space:pre"> </span>if (map.get(keyStr).getLastTime() == null) {
<span style="white-space:pre"> </span>bean.setLastTime(bean.getLastTime());
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>if (bean.getLastTime() == null) {
<span style="white-space:pre"> </span>bean.setLastTime(map.get(keyStr).getLastTime());
<span style="white-space:pre"> </span>System.out.println("map.get(keyStr).getLastTime():"+map.get(keyStr).getLastTime());
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>if (map.get(keyStr).getLastTime() != null && bean.getLastTime() != null) {
<span style="white-space:pre"> </span>bean.setLastTime(map.get(keyStr).getLastTime().compareTo(bean.getLastTime()) == 1
<span style="white-space:pre"> </span>? map.get(keyStr).getLastTime() : bean.getLastTime());
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>//问题找到
<span style="white-space:pre"> </span>bean.setFirstTime(map.get(keyStr).getFirstTime());
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>bean.setOfflineTimes(map.get(keyStr).getOfflineTimes() + bean.getOfflineTimes());
<span style="white-space:pre"> </span>bean.setOnlineTimes(map.get(keyStr).getOnlineTimes() + bean.getOnlineTimes());
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span>map.put(keyStr, bean);
<span style="white-space:pre"> </span>System.out.println("map状态:"+map.get(keyStr).getConnectStatus()+" "+"F:"+map.get(keyStr).getFirstTime()+" "+"L:"+map.get(keyStr).getLastTime());
<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>printerStatusLogVOs.clear();
<span style="white-space:pre"> </span>printerStatusLogVOs.addAll(map.values());
<span style="white-space:pre"> </span>return printerStatusLogVOs;
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>private static List<PrinterStatusVO> newPrinterStatusLogVOList(List<PrinterStatusLog> list) {
<span style="white-space:pre"> </span>List<PrinterStatusVO> printerStatusLogVOList = new ArrayList<PrinterStatusVO>();
<span style="white-space:pre"> </span>for (PrinterStatusLog bean : list) {
<span style="white-space:pre"> </span>// ...HbtShopBO shopBO =
<span style="white-space:pre"> </span>// hobbitShopService.loadShop(bean.getShopId());
<span style="white-space:pre"> </span>PrinterStatusVO printerStatusLogVO = new PrinterStatusVO();
<span style="white-space:pre"> </span>printerStatusLogVO.setShopId(bean.getShopId());
<span style="white-space:pre"> </span>// printerStatusLogVO.setShopName(shopBO.getShopName());
<span style="white-space:pre"> </span>// printerStatusLogVO.setCityName(shopBO.getCityName());
<span style="white-space:pre"> </span>printerStatusLogVO.setDeviceNumber(bean.getDeviceNumber());
<span style="white-space:pre"> </span>printerStatusLogVO.setStatusTime(bean.getStatusTime());
<span style="white-space:pre"> </span>printerStatusLogVO.setConnectStatus(bean.getConnectStatus());
<span style="white-space:pre"> </span>printerStatusLogVO.setOfflineTimes(bean.getConnectStatus() == PrintStatusCode.OFFLINE
<span style="white-space:pre"> </span>? PrintStatusCode.ONLINE : PrintStatusCode.OFFLINE);
<span style="white-space:pre"> </span>printerStatusLogVO.setOnlineTimes(bean.getConnectStatus() == PrintStatusCode.ONLINE ? PrintStatusCode.ONLINE
<span style="white-space:pre"> </span>: PrintStatusCode.OFFLINE);
<span style="white-space:pre"> </span>if (bean.getConnectStatus() == PrintStatusCode.ONLINE) {
<span style="white-space:pre"> </span>printerStatusLogVO.setFirstTime(bean.getUpdateTime());
<span style="white-space:pre"> </span>} else {
<span style="white-space:pre"> </span>printerStatusLogVO.setLastTime(bean.getUpdateTime());
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>System.out.println("转化之后");
<span style="white-space:pre"> </span>System.out.println("转化之后:"+printerStatusLogVO.toString());
<span style="white-space:pre"> </span>printerStatusLogVOList.add(printerStatusLogVO);
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>return printerStatusLogVOList;
<span style="white-space:pre"> </span>}
}