我有两个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;
答案 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);
}