使用Java中的常用名称从两个列表中创建第三个List

时间:2016-02-06 03:38:10

标签: java list arraylist

我有两个Java列表。第一个列表包含NAME列。第二个列表包含NAME和STATUS列。

First List包含:David;大卫

第二个名单包含:David,3;大卫,1;大卫,2;约翰,1;约翰3;

对于两个列表中的每个公共名称,我应该在以下一行中创建第三个列表。

名称状态1状态2状态3

大卫1 2 3
约翰福音1 3

如何使用Java List Collection实现此目的?

我的例子:我创建了三个包含三个列表的类。 //头等舱

公共类FirstClass {
    私有字符串名称;

public FirstClass(String name) {
    super();
    this.name = name;
}

//在这里设置和获取 }

//第二课

public class SecondClass {

private String name;

private int status; 

public SecondClass(String name, int status) {
    super();
    this.name = name;
    this.status = status;
}
   // setters and getters here

}

// ThirdClass

public class ThirdClass {

private String name;    
private int status1;    
private int status2;    
private int status3;

public ThirdClass(String name, int status1, int status2, int status3) {
    super();
    this.name = name;
    this.status1 = status1;
    this.status2 = status2;
    this.status3 = status3;
}

public ThirdClass() {
    // TODO Auto-generated constructor stub
}

// setters and getters here

}

//执行类

import java.util。*;

公共类ClientExecute {

public static void main(String[] args) {


    List<FirstClass> a1 = new ArrayList<FirstClass>();

    a1.add(new FirstClass("David"));
    a1.add(new FirstClass("John"));
    a1.add(new FirstClass("David"));


    List<SecondClass> a2 = new ArrayList<SecondClass>();

    a2.add(new SecondClass ("John", 2));
    a2.add(new SecondClass ("David", 2));
    a2.add(new SecondClass ("David", 3));
    a2.add(new SecondClass ("David", 1));
    a2.add(new SecondClass ("John", 3));


ThirdClass third = null;

List<ThirdClass> a3 =null;

    for(FirstClass  first: a1) {

        third = new ThirdClass();
        a3 = new ArrayList<ThirdClass>();

        for( SecondClass second: a2) {

            if(first.getName().equalsIgnoreCase(second.getName())) {

                third.setName(second.getName());

                if(second.getStatus() ==1){

                    third.setStatus1(second.getStatus());
                }
                else if(second.getStatus() ==2){

                    third.setStatus2(second.getStatus());
                }
                else if(second.getStatus() ==3){

                    third.setStatus3(second.getStatus());
                }
            }

            a3.add(third);
        }

    }

    printThirdList(a3);

}

private static void printThirdList(List<ThirdClass> a3) {

            for(ThirdClass list: a3){
            System.out.println(list.getName()+list.getStatus1()+list.getStatus2()+list.getStatus3());   

            }
}

}

我认为,在比较时迭代两个列表我做错了。 我得到了错误的输出:

    David 1 2 3;
    David 1 2 3;
    David 1 2 3;
    David 1 2 3;
    David 1 2 3;

   Expected Output:
    David 1 2 3;
    John  1   3;

1 个答案:

答案 0 :(得分:1)

首先,在第一个循环之外移动第三类的ArrayList。

其次,从第二个循环中删除a3.add并将其放在第一个循环中,因为它为第二个类的每个值添加相同的实例。这导致多个输出。

List<ThirdClass> a3 = new ArrayList<ThirdClass>();

    for(FirstClass  first: a1) {

        ThirdClass third = new ThirdClass();

        for( SecondClass second: a2) {

            if(first.getName().equalsIgnoreCase(second.getName())) {

                third.setName(second.getName());

                if(second.getStatus() ==1){

                    third.setStatus1(second.getStatus());
                }
                else if(second.getStatus() ==2){

                    third.setStatus2(second.getStatus());
                }
                else if(second.getStatus() ==3){

                    third.setStatus3(second.getStatus());
                }
            }
        }
        a3.add(third);
    }