把list中根据相同属性(合为一个),计算不同属性转化为另外一个list

来源:互联网 发布:射手播放器 mac 编辑:程序博客网 时间:2024/06/05 13:48

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



0 0
原创粉丝点击