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

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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值