Səhv şərtin özündədir:
[code]if (!list2.contains(i.getKod())){[/code]
list2 siyahısında Object1 sinifindən olan obyektlər var, "contains" metoduna obyektin özünü verib axtarmaq lazımdır, onun kodunu yox.
[code]if (!list2.contains(i)){[/code]
Sizin Object1 sinifində "equals" və "hashCode" metodları override olunub?
Kodu tam uyğunlaşdırdım oz koduma.
[code]
public static void main(String[] args) {
List<Object1> list1=new ArrayList<Object1>();
List<Object1> list2=new ArrayList<Object1>();
list1.add(new Object1("001" , 1));
list1.add(new Object1("002" , 2));
list1.add(new Object1("003" , 3));
list1.add(new Object1("004" , 4));
list2.add(new Object1("002" , 2));
list2.add(new Object1("003" , 3));
list2.add(new Object1("004" , 4));
for (Object1 i: list1){
if (!list2.contains(i.getKod())){
list2.add(new Object1(i.getKod(), 0));
}
}
for (Object1 i: list2){
System.out.println(i.getKod()+" "+i.getSum());
}
}
[/code]
002 2
003 3
004 4
001 0
002 0
003 0
004 0
belə bir nəticə çıxır. Yəni müqayisə etmir, 1 ci listi 2 ci listə əlavə edir, qiymətlərə 0 yazır.
[code]
public static void main(String[] args) {
List<Integer> list1=new ArrayList<Integer>();
List<Integer> list2=new ArrayList<Integer>();
list1.add(1);
list1.add(2);
list1.add(3);
list1.add(4);
list2.add(2);
list2.add(3);
list2.add(4);
for (Integer i: list1){
if (!list2.contains(i)){
list2.add(i);
}
}
for (Integer i: list2){
System.out.println(i);
}
}
[/code]
burda yazdığım istədiyim nəticəni verir.
[code]
for (IRayon r : iRayons) {
if (!sut1.contains(r.getKod())) {
for (Cedvel c : sut1) {
c.setKodarazi(r.getKod());
c.setSum(0.0);
sut1.add(c);
}
}
}
[/code]
Bu kodda səhv verir