El método de eliminación del iterador no funciona después de la primera llamada

Estoy tratando de agrupar algunos conjuntos en conjuntos disjuntos. Por ejemplo, si tengo estos 5 conjuntos:

[[1, 3], [2], [1, 5], [6, 8], [1, 7]]

Quiero tener este resultado:

[[2], [6, 8], [1, 3, 5, 7]]

Aquí está el código:

import java.util.*;

public class SetTest {

public static void main(String[] args) {
    // ---- Initialisation
    Set<Set<Integer>> groups = new LinkedHashSet<Set<Integer>>();
    for (int[] set : new int[][] { {1, 3 }, {2 }, {1, 5 }, {6, 8 }, {1, 7} }) {
        Set<Integer> group = new TreeSet<Integer>();
        for (int i : set) {
            group.add(i);
        }
        groups.add(group);
    }
    System.out.println(groups);
    // ---- Grouping values in disjoint sets
    for (Iterator<Set<Integer>> iterator = groups.iterator(); iterator.hasNext();) {
        Set<Integer> group = iterator.next();
        System.out.println(String.format(" + Checking %20s in \t %s", group, groups));
        for (Set<Integer> other : groups) {
            if (!group.equals(other) && !Collections.disjoint(group, other)) {
                other.addAll(group);
                iterator.remove();
                System.out.println(String.format(" - Removed  %20s -> \t %s", group, groups));
                break;
            }
        }
    }
    System.out.println(groups);
}
}

Estoy usando un iterador sobre el conjunto, y quiero agrupar 2 conjuntos en uno, eliminando uno de ellos. Sin embargo, estoy teniendo un problema con el Iterator.remove()método.
Lo que imprime este programa es:

[[1, 3], [2], [1, 5], [6, 8], [1, 7]]
 + Checking               [1, 3] in      [[1, 3], [2], [1, 5], [6, 8], [1, 7]]
 - Removed                [1, 3] ->      [[2], [1, 3, 5], [6, 8], [1, 7]]
 + Checking                  [2] in      [[2], [1, 3, 5], [6, 8], [1, 7]]
 + Checking            [1, 3, 5] in      [[2], [1, 3, 5], [6, 8], [1, 7]]
 - Removed             [1, 3, 5] ->      [[2], [1, 3, 5], [6, 8], [1, 3, 5, 7]]
 + Checking               [6, 8] in      [[2], [1, 3, 5], [6, 8], [1, 3, 5, 7]]
 + Checking         [1, 3, 5, 7] in      [[2], [1, 3, 5], [6, 8], [1, 3, 5, 7]]
 - Removed          [1, 3, 5, 7] ->      [[2], [1, 3, 5, 7], [6, 8], [1, 3, 5, 7]]
[[2], [1, 3, 5, 7], [6, 8], [1, 3, 5, 7]]

La primera vez, la eliminación [1, 3]funciona como se esperaba, pero el resto de las veces, no elimina el elemento. Creo que es porque lo uso addAll(), pero ¿por qué es eso? Porque no hago cambios en groups; Solo cambio un elemento dentro de él ( other), y la referencia es la misma, ¿verdad?

Respuesta 1

Usando Pebble versión 3.0.6. Necesito verificar si el valor 'v' tiene una variable específica (traducido a Java: si Object v tiene una propiedad específica). Buscando algo como {% if v instanceof test.MyClass ...

Estoy haciendo una aplicación de escritorio en Java Swing usando la plataforma Netbeans. Quiero convertir una imagen en escala de grises de 16 bits en una imagen RGB. ¿Cómo puedo hacer eso?

Estoy siguiendo este tutorial sobre cómo configurar Corba, pero no puedo usar los paquetes de los que están hablando, y en ningún lugar de Internet puedo dar una explicación adecuada de cómo obtenerlos. Quiero el ...

Tengo un archivo XML existente y solo quiero agregar la etiqueta en la primera línea de ese archivo XML y la última línea de ese archivo que solo quiero agregar. Cómo puedo conseguir esto. Entrada de muestra: 1. 2. <suite> 3 ....