Java 将ArrayList添加到另一个ArrayList中

Java 将ArrayList添加到另一个ArrayList中,java,arraylist,Java,Arraylist,我有两门课: 产品: 01; Desinfectante 02; Aerosol 03; Limpia Vidrio 04; Desengrasante 05; Mata mosquitos 06; Mata cucarachas 07; Aceite en aerosol 01;1;Elevar la masa hasta llegar a tal punto;0;10 01;1;Mezclar este material con anterior;1;15 01;2;Relevar;2;5

我有两门课:

产品

01; Desinfectante
02; Aerosol
03; Limpia Vidrio
04; Desengrasante
05; Mata mosquitos
06; Mata cucarachas
07; Aceite en aerosol
01;1;Elevar la masa hasta llegar a tal punto;0;10
01;1;Mezclar este material con anterior;1;15
01;2;Relevar;2;5
01;3;Llevar;00;0
02;1;Descripcion;7;2
02;2;Descripcion;6;2
02;2;Descripcion;00;0
03;1;Descripcion;1;1
03;1;Descripcion;2;9
03;2;Descripcion;00;0
03;3;Descripcion;5;2
03;4;Descripcion;6;2
03;4;Descripcion;3;10
04;1;Descripcion;00;0
04;2;Descripcion;1;2
04;3;Descripcion;1;0
04;3;Descripcion;2;2
04;3;Descripcion;3;2
04;4;Descripcion;7;1
04;4;Descripcion;6;2
05;1;Descripcion;7;20
05;1;Descripcion;6;9
05;2;Descripcion;00;0
05;3;Descripcion;1;2
05;3;Descripcion;2;10
06;1;Descripcion;2;12
06;1;Descripcion;4;1
06;1;Descripcion;6;8
06;2;Descripcion;5;4
06;2;Descripcion;7;2
07;1;Descripcion;1;12
07;1;Descripcion;2;2
07;2;Descripcion;3;19
07;2;Descripcion;4;4
07;2;Descripcion;00;2
07;2;Descripcion;5;12
说明

01; Desinfectante
02; Aerosol
03; Limpia Vidrio
04; Desengrasante
05; Mata mosquitos
06; Mata cucarachas
07; Aceite en aerosol
01;1;Elevar la masa hasta llegar a tal punto;0;10
01;1;Mezclar este material con anterior;1;15
01;2;Relevar;2;5
01;3;Llevar;00;0
02;1;Descripcion;7;2
02;2;Descripcion;6;2
02;2;Descripcion;00;0
03;1;Descripcion;1;1
03;1;Descripcion;2;9
03;2;Descripcion;00;0
03;3;Descripcion;5;2
03;4;Descripcion;6;2
03;4;Descripcion;3;10
04;1;Descripcion;00;0
04;2;Descripcion;1;2
04;3;Descripcion;1;0
04;3;Descripcion;2;2
04;3;Descripcion;3;2
04;4;Descripcion;7;1
04;4;Descripcion;6;2
05;1;Descripcion;7;20
05;1;Descripcion;6;9
05;2;Descripcion;00;0
05;3;Descripcion;1;2
05;3;Descripcion;2;10
06;1;Descripcion;2;12
06;1;Descripcion;4;1
06;1;Descripcion;6;8
06;2;Descripcion;5;4
06;2;Descripcion;7;2
07;1;Descripcion;1;12
07;1;Descripcion;2;2
07;2;Descripcion;3;19
07;2;Descripcion;4;4
07;2;Descripcion;00;2
07;2;Descripcion;5;12
问题是:我必须在产品中插入说明ArrayList。它们之间的链接是第一个数字,即产品的代码

我尝试了两件事,第一件:

public static ArrayList<Productos> InsertInstInProd(ArrayList<Instrucciones> instructions, ArrayList<Productos> products)
{ 
    for (int i = 0; i < products.size()-1; i++)
    {
        int n = 0;
        for (int j = 0; j < instructions.size()-1; j++)
        {
            int first = products.get(i).getNumero();
            int second = instructions.get(j).getCodProd();

            if (first == second)
            {
                products.get(i).getInstr().get(n).setCodIns(instructions.get(j).getCodIns());
                products.get(i).getInstr().get(n).setCodProd(instructions.get(j).getCodProd());
                products.get(i).getInstr().get(n).setDescr(instructions.get(j).getDescr());
                products.get(i).getInstr().get(n).setMat(instructions.get(j).getMat());
                products.get(i).getInstr().get(n).setMatNec(instructions.get(j).getMatNec());

                n++;
            }
        }
        n = 0;
    }
公共静态ArrayList InsertInstInProd(ArrayList指令、ArrayList产品)
{ 
对于(int i=0;i
第二条:

public static ArrayList<Productos> InsertInstInProd(ArrayList<Instrucciones> instructions, ArrayList<Productos> products)
{ 
    for (int i = 0; i < products.size()-1; i++)
    {
        int n = 0;
        for (int j = 0; j < instructions.size()-1; j++)
        {
            int first = products.get(i).getNumero();
            int second = instructions.get(j).getCodProd();

            if (first == second)
            {
                products.get(i).setInstr(instructions);
                n++;
            }
        }
        n = 0;
    }

    return products;
}
公共静态ArrayList InsertInstInProd(ArrayList指令、ArrayList产品)
{ 
对于(int i=0;i
由于以下原因,您将获得NullPointerException

     products.get(i).getInstr().get(n).setCodIns(instructions.get(j).getCodIns());
您没有检查列表
products.get(i).getInstr()
是否包含元素。当列表
为空时,以及当您作为
products.get(i).getInstr().get(0)访问时
它会抛出
NullPointerException
,因为尝试获取空列表的第一个元素。因此,在执行此操作之前,请确保
products.get(i).getInstr()
不是空的

如果是同一类型,可以直接添加整个arraylist:

   products.get(i).getInstr().addAll(instructions); // again make sure that is not empty.
如果您只想重播,请使用:

    products.get(i).setInstr(instructions.get(j)); 
产品类别



    package productsandinstructions;

    import java.util.List;

    public class Product {
        private int productId;
        private String productName;
        private List instructions;

        public int getProductId() {
            return productId;
        }

        public void setProductId(int productId) {
            this.productId = productId;
        }

        public String getProductName() {
            return productName;
        }

        public void setProductName(String productName) {
            this.productName = productName;
        }

        public List getInstructions() {
            return instructions;
        }

        public void setInstructions(List instructions) {
            this.instructions = instructions;
        }
    }

教学班



    package productsandinstructions;

    public class Instruction {
        private int productId;
        private int instructionId;
        private String instDesc;
        private int mat;
        private int matNec;
        private boolean done;

        public int getProductId() {
            return productId;
        }

        public void setProductId(int productId) {
            this.productId = productId;
        }

        public int getInstructionId() {
            return instructionId;
        }

        public void setInstructionId(int instructionId) {
            this.instructionId = instructionId;
        }

        public String getInstDesc() {
            return instDesc;
        }

        public void setInstDesc(String instDesc) {
            this.instDesc = instDesc;
        }

        public int getMat() {
            return mat;
        }

        public void setMat(int mat) {
            this.mat = mat;
        }

        public int getMatNec() {
            return matNec;
        }

        public void setMatNec(int matNec) {
            this.matNec = matNec;
        }

        public boolean isDone() {
            return done;
        }

        public void setDone(boolean done) {
            this.done = done;
        }
    }

主类



    package productsandinstructions;

    import java.util.List;

    public class ProductsAndInstructionsMain {

        private List products;
        private List instructions;

        public List getProducts() {
            return products;
        }

        public void setProducts(List products) {
            this.products = products;
        }

        public List getInstructions() {
            return instructions;
        }

        public void setInstructions(List instructions) {
            this.instructions = instructions;
        }

        public static void main(String[] args) {
            ProductsAndInstructionsMain main = new ProductsAndInstructionsMain();
            main.mergeProductsAndInstructions();
        }

        public void mergeProductsAndInstructions() {
            for (Product product : products) {
                for (Instruction instruction : instructions) {
                    if ((!(instruction.isDone())) && (instruction.getProductId() == product.getProductId())) {
                        product.getInstructions().add(instruction);
                        instruction.setDone(true);
                    }
                }
            }
        }
    }


那么?你的问题是什么?在第一种情况下,我得到了这个:线程“main”中的异常java.lang.IndexOutOfBoundsException:Index:0,Size:0在第二个中它不起作用,它不验证产品的代码,所以它是无用的。我不知道我做错了什么。你能在问题中发布完整的错误吗?好的,那么我如何将整个ArrayList(说明)添加到products.get(I).getInstr()是的,我试过了,但问题是所有的ArrayList都在那里,我只想要那一行。products.get(i)。setInstr(instructions)。get(j);