如何将值从一个列表复制到另一个具有不同对象的列表

时间:2015-08-05 06:30:40

标签: java

我有MaterailInfo和StyleInfo,我想根据StyleNumber与materialNumber匹配来设置styleDescription。我正在使用2 for循环,有没有替代解决方案?

MaterailInfo:

class MaterailInfo {
    private String materialNumber;
    private String materialDescription;

    public MaterailInfo(String materialNumber, String materialDescription) {
        this.materialNumber = materialNumber;
        this.materialDescription = materialDescription;
    }

    // getter setter methods

}

StyleInfo:

class StyleInfo {
    private String StyleNumber;
    private String styleDescription;

    public StyleInfo(String styleNumber, String styleDescription) {
        StyleNumber = styleNumber;
        this.styleDescription = styleDescription;
    }

    // getter setter toString methods

}

TEST12:

public class TEst12 {

    public static void main(String[] args) {
        List<MaterailInfo> mList = new ArrayList<MaterailInfo>();
        mList.add(new MaterailInfo("a", "a-desc"));
        mList.add(new MaterailInfo("b", "b-desc"));
        mList.add(new MaterailInfo("c", "c-desc"));

        List<StyleInfo> sList = new ArrayList<StyleInfo>();
        sList.add(new StyleInfo("a", ""));
        sList.add(new StyleInfo("b", ""));
        sList.add(new StyleInfo("c", ""));

        for (MaterailInfo m : mList) {
            for (StyleInfo s : sList) {
                if (s.getStyleNumber().equals(m.getMaterialNumber())) {
                    s.setStyleDescription(m.getMaterialDescription());
                }
            }
        }

        System.out.println(sList);
    }
}

3 个答案:

答案 0 :(得分:1)

如果您使用Map代替List来存储数据,则只需执行一次循环就可以实现:

Map<String, String> mMap = new HashMap<String, String>();
mMap.put("a", "a-desc");
mMap.put("b", "b-desc");
mMap.put("c", "c-desc");

Map<String, String> sMap = new HashMap<String, String>();
sMap.put("a", "");
sMap.put("b", "");
sMap.put("c", "");

for (Map.Entry<String, String> entry : mMap.entrySet()) {
    sMap.put(entry.getKey(), mMap.get(entry.getKey());
}

如果样式编号与任何已知材料编号不匹配,此代码将使样式说明为空。

答案 1 :(得分:0)

如果您的数字不能重复,那么使用HashMap而不是类可以更快一些。

import java.io.*;
import java.util.*;
import java.util.Map.Entry;


public class Demo {

    public static void main(String[] args) {

        HashMap<String, String> mList = new HashMap();
        HashMap<String, String> sList = new HashMap();
        mList.put("a", "a-desc");
        mList.put("b", "b-desc");
        mList.put("c", "c-desc");
        sList.put("a", "");
        sList.put("b", "");
        sList.put("c", "");

        Iterator entries = sList.entrySet().iterator();
        while (entries.hasNext()) {
            Entry entry = (Entry) entries.next();
            if (mList.containsKey(entry.getKey())) {
                sList.put((String) entry.getKey(), mList.get(entry.getKey()));
            }
        }

        for (Map.Entry<String, String> entry : sList.entrySet()) {
            System.out.println(entry.getKey() + " " + entry.getValue());
        }

    }
}

答案 2 :(得分:0)

您可以使用for loop这样的<{p}}来完成此操作

for (int i = 0; i < mList.size(); i++) {
   sList.get(i).setStyleDescription(mList.get(i).getMaterialDescription());  
}

注意:我假设您在大小方面有平衡列表。