Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将值从一个列表复制到具有不同对象的另一个列表_Java - Fatal编程技术网

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

Java 如何将值从一个列表复制到具有不同对象的另一个列表,java,Java,我有MaterialInfo和StyleInfo,我想根据StyleNumber与materialNumber的匹配设置styleDescription。我使用2作为循环,是否有其他解决方案 材料信息: class MaterailInfo { private String materialNumber; private String materialDescription; public MaterailInfo(String materialNumber, Stri

我有MaterialInfo和StyleInfo,我想根据StyleNumber与materialNumber的匹配设置styleDescription。我使用2作为循环,是否有其他解决方案

材料信息:

class MaterailInfo {
    private String materialNumber;
    private String materialDescription;

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

    // getter setter methods

}
class StyleInfo {
    private String StyleNumber;
    private String styleDescription;

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

    // getter setter toString methods

}
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);
    }
}
样式信息:

class MaterailInfo {
    private String materialNumber;
    private String materialDescription;

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

    // getter setter methods

}
class StyleInfo {
    private String StyleNumber;
    private String styleDescription;

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

    // getter setter toString methods

}
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);
    }
}
TEst12:

class MaterailInfo {
    private String materialNumber;
    private String materialDescription;

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

    // getter setter methods

}
class StyleInfo {
    private String StyleNumber;
    private String styleDescription;

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

    // getter setter toString methods

}
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);
    }
}
公共类TEst12{
公共静态void main(字符串[]args){
List mList=new ArrayList();
添加(新材料信息(“a”、“a-desc”);
添加(新材料信息(“b”、“b-desc”);
添加(新材料信息(“c”、“c-desc”);
List sList=new ArrayList();
添加(新的样式信息(“a”,“a”);
添加(新的样式信息(“b”和“));
添加(新的样式信息(“c”和“));
对于(MaterialInfo m:mList){
for(样式信息:sList){
如果(s.getStyleNumber().equals(m.getMaterialNumber())){
s、 setStyleDescription(m.getMaterialDescription());
}
}
}
系统输出打印LN(sList);
}
}

如果您使用
地图
而不是
列表
来存储数据,则只需执行一个循环即可:

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());
}
Map mMap=newhashmap();
mMap.put(“a”、“a-desc”);
mMap.put(“b”、“b-desc”);
mMap.put(“c”、“c-desc”);
Map sMap=newhashmap();
sMap.put(“a”和“);
sMap.put(“b”和“);
sMap.put(“c”和“);
对于(Map.Entry:mMap.entrySet()){
sMap.put(entry.getKey(),mMap.get(entry.getKey());
}

如果样式编号与任何已知的物料编号不匹配,此代码将使样式描述为空。

如果您的编号不能重复,使用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());
        }

    }
}
import java.io.*;
导入java.util.*;
导入java.util.Map.Entry;
公开课演示{
公共静态void main(字符串[]args){
HashMap mList=新的HashMap();
HashMap sList=新的HashMap();
列表放置(“a”、“a-desc”);
列表放置(“b”、“b-desc”);
列表放置(“c”、“c-desc”);
sList.put(“a”,“a”);
sList.put(“b”和“);
sList.put(“c”和“);
迭代器条目=sList.entrySet().Iterator();
while(entries.hasNext()){
Entry=(Entry)entries.next();
if(mList.containsKey(entry.getKey())){
sList.put((字符串)entry.getKey(),mList.get(entry.getKey());
}
}
for(Map.Entry:sList.entrySet()){
System.out.println(entry.getKey()+“”+entry.getValue());
}
}
}

您可以像这样使用一个
for循环

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

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

我认为Java 8可能有一个非常好的方法来使用streams处理这个问题。谢谢@Tim,但我仅限于Java 6:(你能在这里使用
Map
而不是
List
吗?你想提高复杂性吗?是的,如果没有重复项的话。Map是一个更好的选择。为什么你要排除If语句呢?
If
语句是不必要的,因为查找过程隐式地执行此检查。我想我也可以使用一个循环来完成List。)呃,使用地图。让我发布解决方案