public static String encodeList(Object[] objs) { return encodeList(Arrays.asList(objs)); } @SuppressWarnings("unchecked") public static String encodeList(Collection objs) { JSONArray list = new JSONArray(); if (objs == null || objs.size() == 0) return list.toString(); for (Object ae : objs) { list.add(ae); } return list.toString(); }
@SuppressWarnings("unchecked") public static String encodeObject(Object obj){ if(obj instanceof Collection) return encodeList((Collection)obj); JSONObject jo = JSONObject.fromObject(obj); return jo.toString(); }
@SuppressWarnings("unchecked") public static <T>List<T> decodeList(String str, Class<T> clazz) { if (str == null || "".equals(str)) return null; JSONArray obj = JSONArray.fromObject(str); Object[] rts = obj.toArray(); List<T> result = new ArrayList<T>(rts.length); for (int i = 0; i < rts.length; i++) { Object jo = rts[i]; T ele = (T)JSONObject.toBean((JSONObject) jo, clazz); result.add( ele ); } return result; }
{"deviceid":"460001204101325","distance":15.0,"maxspeed":66.0,"runningtime":"26分30秒"},
{"deviceid":"460001204101325","distance":15.5,"maxspeed":55.0,"runningtime":"29分12秒"},
{"deviceid":"4609320402424","distance":35.2,"maxspeed":74.0,"runningtime":"1时42分27秒"},
{"deviceid":"4609320402424","distance":4.9,"maxspeed":25.0,"runningtime":"30分24秒"},
{"deviceid":"460706130100567","distance":0.0,"maxspeed":0.0,"runningtime":"0秒"},{"deviceid":"460706130100567","distance":88.6,"maxspeed":85.0,"runningtime":"1时22分3秒"},{"deviceid":"460706130100805","distance":26.4,"maxspeed":64.0,"runningtime":"50分59秒"},
把上面的数据只要deviceid是一样的都只取一个,后面的参数相加弄成下面这种的{"deviceid":"460001204101325","distance":41.3,"maxspeed":66.0,"runningtime":"1时31分08秒"},
{"deviceid":"4609320402424","distance":40.1,"maxspeed":74.0,"runningtime":"2时12分51秒"},
{"deviceid":"460706130100567","distance":88.6,"maxspeed":85.0,"runningtime":"1时22分3秒"},{"deviceid":"460706130100805","distance":26.4,"maxspeed":64.0,"runningtime":"50分59秒"},
这个怎么弄????
map key 放你的deviceid 。
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;import net.sf.json.JSONArray;
public class TTT {
public static void main(String[] args) {
String json = "[{\"deviceid\":\"460001204101325\",\"distance\":0.0,\"maxspeed\":0.0,\"runningtime\":\"0秒\"},"+
"{\"deviceid\":\"460001204101325\",\"distance\":15.0,\"maxspeed\":66.0,\"runningtime\":\"26分30秒\"},"+
"{\"deviceid\":\"4609320402424\",\"distance\":35.2,\"maxspeed\":74.0,\"runningtime\":\"1时42分27秒\"},"+
"{\"deviceid\":\"4609320402424\",\"distance\":4.9,\"maxspeed\":25.0,\"runningtime\":\"30分24秒\"}]";
JSONArray ja = JSONArray.fromObject(json);
List<DeviceInfo> list = (List<DeviceInfo>) JSONArray.toCollection(ja, DeviceInfo.class);
Map<String,DeviceInfo> map = new HashMap<String,DeviceInfo>();
for(DeviceInfo deviceInfo: list){
DeviceInfo deviceMap = (DeviceInfo) map
.get(deviceInfo.getDeviceid());
if (deviceMap == null) {
map.put(deviceInfo.getDeviceid(), deviceInfo);
} else {
deviceMap.setDistance(deviceMap.getDistance()+deviceInfo.getDistance());
deviceMap.setMaxspeed(deviceMap.getMaxspeed()>=deviceInfo.getMaxspeed()?deviceMap.getMaxspeed():deviceInfo.getMaxspeed());
//runningtime换个方式,这个你自己搞
}
}
java.util.Iterator it = map.entrySet().iterator();
List<DeviceInfo> newList = new ArrayList<DeviceInfo>(); //最后要的List
while(it.hasNext()){
java.util.Map.Entry entry = (java.util.Map.Entry)it.next();
newList.add((DeviceInfo) entry.getValue());
}
for(DeviceInfo d: newList){
System.out.println(d.getDeviceid()+"--"+d.getDistance()+"--"+d.getMaxspeed());
}
}
}
public class DeviceInfo{
private String deviceid;
private double distance;
private double maxspeed;
private String runningtime;
public String getDeviceid() {
return deviceid;
}
public void setDeviceid(String deviceid) {
this.deviceid = deviceid;
}
public double getDistance() {
return distance;
}
public void setDistance(double distance) {
this.distance = distance;
}
public double getMaxspeed() {
return maxspeed;
}
public void setMaxspeed(double maxspeed) {
this.maxspeed = maxspeed;
}
public String getRunningtime() {
return runningtime;
}
public void setRunningtime(String runningtime) {
this.runningtime = runningtime;
}
}
{"deviceid":"460001204101325","distance":15.0,"maxspeed":66.0,"runningtime":"26分30秒"},
{"deviceid":"460001204101325","distance":15.5,"maxspeed":55.0,"runningtime":"29分12秒"},
{"deviceid":"4609320402424","distance":35.2,"maxspeed":74.0,"runningtime":"1时42分27秒"},
{"deviceid":"4609320402424","distance":4.9,"maxspeed":25.0,"runningtime":"30分24秒"},
{"deviceid":"460706130100567","distance":0.0,"maxspeed":0.0,"runningtime":"0秒"},{"deviceid":"460706130100567","distance":88.6,"maxspeed":85.0,"runningtime":"1时22分3秒"},{"deviceid":"460706130100805","distance":26.4,"maxspeed":64.0,"runningtime":"50分59秒"},
把上面的数据只要deviceid是一样的都只取一个,后面的参数相加弄成下面这种的{"deviceid":"460001204101325","distance":41.3,"maxspeed":66.0,"runningtime":"1时31分08秒"},
{"deviceid":"4609320402424","distance":40.1,"maxspeed":74.0,"runningtime":"2时12分51秒"},
{"deviceid":"460706130100567","distance":88.6,"maxspeed":85.0,"runningtime":"1时22分3秒"},{"deviceid":"460706130100805","distance":26.4,"maxspeed":64.0,"runningtime":"50分59秒"},
这个怎么弄????
{"deviceid":"460001204101325","distance":15.0,"maxspeed":66.0,"runningtime":"26分30秒"},
{"deviceid":"460001204101325","distance":15.5,"maxspeed":55.0,"runningtime":"29分12秒"},
{"deviceid":"4609320402424","distance":35.2,"maxspeed":74.0,"runningtime":"1时42分27秒"},
{"deviceid":"4609320402424","distance":4.9,"maxspeed":25.0,"runningtime":"30分24秒"},
{"deviceid":"460706130100567","distance":0.0,"maxspeed":0.0,"runningtime":"0秒"},{"deviceid":"460706130100567","distance":88.6,"maxspeed":85.0,"runningtime":"1时22分3秒"},{"deviceid":"460706130100805","distance":26.4,"maxspeed":64.0,"runningtime":"50分59秒"},
把上面的数据只要deviceid是一样的都只取一个,后面的参数相加弄成下面这种的{"deviceid":"460001204101325","distance":41.3,"maxspeed":66.0,"runningtime":"1时31分08秒"},
{"deviceid":"4609320402424","distance":40.1,"maxspeed":74.0,"runningtime":"2时12分51秒"},
{"deviceid":"460706130100567","distance":88.6,"maxspeed":85.0,"runningtime":"1时22分3秒"},{"deviceid":"460706130100805","distance":26.4,"maxspeed":64.0,"runningtime":"50分59秒"},
这个怎么弄????
{"deviceid":"460001204101325","distance":15.0,"maxspeed":66.0,"runningtime":"26分30秒"},
{"deviceid":"460001204101325","distance":15.5,"maxspeed":55.0,"runningtime":"29分12秒"},
{"deviceid":"4609320402424","distance":35.2,"maxspeed":74.0,"runningtime":"1时42分27秒"},
{"deviceid":"4609320402424","distance":4.9,"maxspeed":25.0,"runningtime":"30分24秒"},
{"deviceid":"460706130100567","distance":0.0,"maxspeed":0.0,"runningtime":"0秒"},{"deviceid":"460706130100567","distance":88.6,"maxspeed":85.0,"runningtime":"1时22分3秒"},{"deviceid":"460706130100805","distance":26.4,"maxspeed":64.0,"runningtime":"50分59秒"},
把上面的数据只要deviceid是一样的都只取一个,后面的参数相加弄成下面这种的{"deviceid":"460001204101325","distance":41.3,"maxspeed":66.0,"runningtime":"1时31分08秒"},
{"deviceid":"4609320402424","distance":40.1,"maxspeed":74.0,"runningtime":"2时12分51秒"},
{"deviceid":"460706130100567","distance":88.6,"maxspeed":85.0,"runningtime":"1时22分3秒"},{"deviceid":"460706130100805","distance":26.4,"maxspeed":64.0,"runningtime":"50分59秒"},
这个怎么弄???? json 转成Bean 的方法:import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;import net.sf.json.JSONArray;
import net.sf.json.JSONObject;public class JsonUtils {
public static String encodeList(Object[] objs) {
return encodeList(Arrays.asList(objs));
} @SuppressWarnings("unchecked")
public static String encodeList(Collection objs) {
JSONArray list = new JSONArray();
if (objs == null || objs.size() == 0)
return list.toString();
for (Object ae : objs) {
list.add(ae);
}
return list.toString();
}
@SuppressWarnings("unchecked")
public static String encodeObject(Object obj){
if(obj instanceof Collection)
return encodeList((Collection)obj);
JSONObject jo = JSONObject.fromObject(obj);
return jo.toString();
}
@SuppressWarnings("unchecked")
public static <T>List<T> decodeList(String str, Class<T> clazz) {
if (str == null || "".equals(str))
return null;
JSONArray obj = JSONArray.fromObject(str);
Object[] rts = obj.toArray();
List<T> result = new ArrayList<T>(rts.length);
for (int i = 0; i < rts.length; i++) {
Object jo = rts[i];
T ele = (T)JSONObject.toBean((JSONObject) jo, clazz);
result.add( ele );
}
return result;
}
@SuppressWarnings("unchecked")
public static <T>T decodeObject(String json,Class<T> clz){
JSONObject jsonObject = JSONObject.fromObject(json);
T bean = (T) JSONObject.toBean(jsonObject, clz);
return bean;
}
} 有适合你的 ,可以转成list 里放的javaBean的型式。BEAN重写equals()方法,只要deviceid字段相同就认为是同一个对象。之后就可以遍历这个集合a(原始集合),放到b(去重后的集合),每次放的时候都检查b集合中是否已经有这个对像。b.contains(o) 用这个判断是否已经存在。存在就不放进去。2,直接遍历,放到hashset中也可以。会把重复的去掉。
3,treeSet是按照排序去重的,如果用就实现排序接口的排序方法。排序相同会去掉。
整成MAP KEY为deviceid,如果MAP中有KEY就进行累加操作,如果没有就直接PUT。
循环咯