请教问题,存在如下数据集合:
[{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程序片段更好,只有算法片段也行,实在不行,给个思路也好,谢谢大家.

解决方案 »

  1.   

    hashmap, <key=DM, value=bean_obj>if map.contains(DM1){
       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();
    }
    }
      

  2.   

    算法片段示意代码String DM_BAK = "";
    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   }}
      

  3.   


    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();
    }
    }
      

  4.   

    楼主似乎还应该考虑下 Value 和metric 重复的情况,你需要什么样的答案