2016-02-06 33 views
-2

我有兩個Java列表。第一個列表包含NAME列。第二個列表包含NAME和STATUS列。在Java中爲通用名稱制作第二個列表中的第三個列表

第一列表包含:David; David

第二列表包含:David,3; David,1;大衛,2;約翰,1;約翰3;

對於兩個列表中的每個常見名稱,我應該在下面的一行中創建第三個列表。

名稱狀態1狀態2 STATUS3

大衛·1 2 3
約1 3

我怎樣才能做到這一點使用Java列表收藏?

我的例子:我創建了三個包含三個列表的類。 //頭等艙

public class FirstClass {
private String name;

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

// getter和setter方法在這裏 }

//二等

公共類二等{

private String name; 

private int status; 

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

}

//三級欄目

公共類三級欄目{

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 

}

//執行類

進口的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

首先,將第三類的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); 
    } 
相關問題