将ArrayList添加到另一个ArrayList中

时间:2015-07-11 03:00:18

标签: 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;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插入到Products中。它们之间的链接是第一个数字,即产品的代码。

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

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

第二个:

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

2 个答案:

答案 0 :(得分:1)

由于

,您收到NullPointerException
     products.get(i).getInstr().get(n).setCodIns(instructions.get(j).getCodIns());

您没有检查列表products.get(i).getInstr()是否包含元素。当列表为empty时,当您以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)); 

答案 1 :(得分:0)

产品类



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