我有三个对象类:
public class Section{
private Integer id;
private List<Program> programs;
}
public class Program{
private String title;
private Integer id;
private List<Broadcast> broadcasts = null;
}
public class Broadcast {
private Integer id;
private String title;
}
我有Section对象的两个列表:List<Section> oldSections
和List<Section> newSections
。我需要检查oldSections
是否包含newSections
列表中的所有节,以确定我必须比较id值。如果没有,那么我需要将该部分添加到oldSections中,如果需要,则必须对“节目和广播”进行相同的检查。
我试图遍历所有部分,程序和广播,但这似乎不是一个好的解决方案。最好的方法是什么?
private void updateSections(List<Section> oldSections, List<Section> newSections){
for(Section newSection: newSections){
boolean alreadyAdded = false;
for(Section oldSection: oldSections){
if(newSection.getId() == oldSection.getId()){
alreadyAdded = true;
}
}
if(!alreadyAdded){
oldSections.add(newSection);
} else {
//HERE I HAVE TO COMPARE PROGRAMS AND THEN BROADCASTS
}
}
}
答案 0 :(得分:1)
集合是可以帮助您避免重复的列表。
您可以简单地覆盖 Java Bean / POJO 对象的等于和hashCode 方法 并使用集。这样,重复的条目将被拒绝,您不会 需要再合并您的数据。您的列表元素始终是唯一的。
看看这个线程,看看如何在Java中实现Set-> Verify there is a combination of unique string
答案 1 :(得分:0)
您还可以使用Java 8合并没有重复项的列表。
public class Test {
public static void main(String[] args) {
List<Student> list1 = Arrays.asList(new Student("a", 1), new Student("b", 2), new Student("f", 3));
List<Student> list2 = Arrays.asList(new Student("b", 4), new Student("c", 5), new Student("f", 6));
List<Student> list3 = Arrays.asList(new Student("b", 7), new Student("d", 8), new Student("e", 9));
List<Student> dogs = new ArrayList<>(Stream.of(list1, list2, list3).flatMap(List::stream)
.collect(Collectors.toMap(Student::getName, d -> d, (Student x, Student y) -> x == null ? y : x)).values());
dogs.forEach(System.out::println);
}
}
class Student {
String name;
int id;
public Student(String name, int id) {
this.name = name;
this.id = id;
}
public String getName() {
return name;
}
@Override
public String toString() {
return "Student{" + "name='" + name + '\'' + ", id=" + id + '}';
}
}