Hallo,
folgendes will ich erreichen: Ich habe eine Liste, die weitere Listen bestehend aus "Points" beinhaltet. Nun will ich diese Listen zusammenfassen, wenn sich das erste und das letzte Element von 2 Listen überschneiden (oder umgekehrt). Eigentlich hört sich das ja nicht so schwierig an. aber trotzdem mach ich damit jetzt schon den ganzen Tag rum und bekomme es einfach nicht hin.
Mein jetziges Programm wirft eine "java.util.ConcurrentModificationException". Falls jemand ein Verbesserungsschlag hätte wäre ich sehr Dankbar 🙂 Hier das Programm:
folgendes will ich erreichen: Ich habe eine Liste, die weitere Listen bestehend aus "Points" beinhaltet. Nun will ich diese Listen zusammenfassen, wenn sich das erste und das letzte Element von 2 Listen überschneiden (oder umgekehrt). Eigentlich hört sich das ja nicht so schwierig an. aber trotzdem mach ich damit jetzt schon den ganzen Tag rum und bekomme es einfach nicht hin.
Mein jetziges Programm wirft eine "java.util.ConcurrentModificationException". Falls jemand ein Verbesserungsschlag hätte wäre ich sehr Dankbar 🙂 Hier das Programm:
Java:
List<List<Point>> list = new ArrayList<List<Point>>();
List<Point> list1 = new ArrayList<Point>();
List<Point> list2 = new ArrayList<Point>();
list.add(list1);
list.add(list2);
list1.add(new Point(1,3));
list1.add(new Point(4,3));
list2.add(new Point(3,3));
list2.add(new Point(6,3));
list2.add(new Point(1,3));
Iterator<List<Point>> iter = list.iterator();
while(iter.hasNext()){
// Für jede Liste erstes und letztes Element heraussuchen
List<Point> list_inner = iter.next();
Point first = list_inner.get(0);
Point last = list_inner.get(list_inner.size()-1);
// ... und mit dem ersten und letzten Element jeder anderen Liste vergleichen
Iterator<List<Point>> iter2 = list.iterator();
while(iter2.hasNext()){
List<Point> list_inner2 = iter2.next();
Point first_comp = list_inner2.get(0);
Point last_comp = list_inner2.get(list_inner2.size()-1);
if(!list_inner.equals(list_inner2) && (first.equals(first_comp) || last.equals(last_comp) || first.equals(last_comp) || last.equals(first_comp))){
// wenn Bedinungen erfüllt sind, werden die Listen vereinigt, und die nun überflüssige Liste gelöscht
list_inner.addAll(list_inner2);
list.remove(list_inner2);
}
}
}