请教问题,存在如下数据集合:
[{value1=33, DM=000000, metric1=RS}, {value2=22, DM=000000, metric2=JGS}, {value1=11, DM=040000, metric1=RS}, {value2=8, DM=040000, metric2=JGS}]加工后数据集合:
[{value1=33,value2=22, DM=000000, metric1=RS,metric2=JGS},{value1=11,value2=8, DM=040000, metric1=RS,metric2=JGS}]也就是说,把DM_SWJG相等的多组数据加工成一组数据,有没有好点的算法?
两个循环遍历集合元素不考虑.时间复杂度太高.(如存在2000组集合,采用2个循环遍历加工需要2000*2000次比对)如果给出java程序片段更好,只有算法片段也行,实在不行,给个思路也好,谢谢大家.
[{value1=33, DM=000000, metric1=RS}, {value2=22, DM=000000, metric2=JGS}, {value1=11, DM=040000, metric1=RS}, {value2=8, DM=040000, metric2=JGS}]加工后数据集合:
[{value1=33,value2=22, DM=000000, metric1=RS,metric2=JGS},{value1=11,value2=8, DM=040000, metric1=RS,metric2=JGS}]也就是说,把DM_SWJG相等的多组数据加工成一组数据,有没有好点的算法?
两个循环遍历集合元素不考虑.时间复杂度太高.(如存在2000组集合,采用2个循环遍历加工需要2000*2000次比对)如果给出java程序片段更好,只有算法片段也行,实在不行,给个思路也好,谢谢大家.
Bean b=obj = map.get(DM1);
obj.addValue(newObj.getValue0());
obj.addMetrics(newObj.getMetric0());
}
class Module{
private ArrayList<Integer> values;
private String DM;
private ArrayList<String> metrics;
//...
public String toString(){
StringBuffer ret = new StringBuffer("");
for(int i=0; i<values.size(); ++i){
ret.append("values").append(i).append("=").append(values.get(i)).append(",");
}
ret.append(DM);
int i=0;
for(; i<metrics.size()-1; ++i){
ret.append("metric").append(i).append("=").append(metrics.get(i)).append(",");
}
ret.append("metric").append(i).append("=").append(metrics.get(i));
return ret.toString();
}
}
String values = "";
String metrics = "";
List 新的集合 = new ArrayList();
for(int i=0;i<加工前数据集合.size();i++) {
加工前集合中一个元素 = 加工前数据集合.get(i);
if(i==0) DM_BAK = 加工前集合中一个元素.DM;
if(DM_BAK != 加工前集合中一个元素.DM){//说明已经不是同一个DM了
新的集合加入values ,加入metrics, 加入DM
DM_BAK = 加工前集合中一个元素.DM;
values = "";
metrics = "";
}
values += 加工前集合中一个元素.value+",";
metrics += 加工前集合中一个元素.metric+",";f
if(i == 加工前数据集合.size()-1) {//处理最后一条数据
新的集合加入values ,加入metrics, 加入DM }}
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;public class CollectionConvert { public static void main(String args[]) {
BeforeConvBean bcb1 = new BeforeConvBean("33", "000000", "RS");
BeforeConvBean bcb2 = new BeforeConvBean("22", "000000", "JGS");
BeforeConvBean bcb3 = new BeforeConvBean("11", "040000", "RS");
BeforeConvBean bcb4 = new BeforeConvBean("8", "040000", "RS");
List<BeforeConvBean> beforeList = new ArrayList<BeforeConvBean>();
beforeList.add(bcb1);
beforeList.add(bcb2);
beforeList.add(bcb3);
beforeList.add(bcb4); Map<String, AfterConvBean> map = new HashMap<String, AfterConvBean>();
String dm;
AfterConvBean tmpAcb;
for (BeforeConvBean bcb : beforeList) {
dm = bcb.getDm();
if (!map.containsKey(dm)) {
tmpAcb = new AfterConvBean(); map.put(dm, tmpAcb);
} else {
tmpAcb = map.get(dm);
}
tmpAcb.setDm(dm);
tmpAcb.setValue(bcb.getValue());
tmpAcb.setMetric(bcb.getMetric());
} Iterator iter = map.keySet().iterator();
while (iter.hasNext()) {
System.out.println(map.get(iter.next().toString()).toString());
}
}
}class BeforeConvBean {
private String value = null; private String dm = null; private String metric = null; public BeforeConvBean(String v, String d, String m) {
setValue(v);
setDm(d);
setMetric(m);
} public String getDm() {
return dm;
} public void setDm(String dm) {
this.dm = dm;
} public String getMetric() {
return metric;
} public void setMetric(String metric) {
this.metric = metric;
} public String getValue() {
return value;
} public void setValue(String value) {
this.value = value;
}
}class AfterConvBean {
private List<String> valueList = null; private String dm = null; private List<String> metricList = null; public AfterConvBean(String v, String d, String m) {
} public AfterConvBean() {
valueList = new ArrayList<String>();
metricList = new ArrayList<String>();
} public String getDm() {
return dm;
} public void setDm(String dm) {
this.dm = dm;
} public void setValue(String v) {
valueList.add(v);
} public void setMetric(String m) {
metricList.add(m);
} public String toString() {
StringBuffer ret = new StringBuffer();
String vIndex;
for (int i = 0; i < valueList.size(); i++) {
vIndex = String.valueOf(i + 1);
ret.append("value" + vIndex);
ret.append("=");
ret.append(valueList.get(i));
ret.append(",");
}
ret.append("DM");
ret.append("=");
ret.append(dm);
ret.append(",");
String mIndex;
for (int j = 0; j < metricList.size(); j++) {
mIndex = String.valueOf(j + 1);
ret.append("metric" + mIndex);
ret.append("=");
ret.append(metricList.get(j));
ret.append(",");
}
return ret.toString();
}
}