Cómo encontrar pares de objetos en la misma lista en Java de una buena manera

En eso

Tengo unArrayList con diferentes objetos Estoy tratando de buscar en la misma lista de pares de objetos sobre la base de una condición. Si encuentro los pares correctos, estoy creando un nuevo objeto y agregándolo a una nueva lista. Pero quiero evitar crear un par de objetos cuando objectA se empareja con objectB y objectB se empareja con objectA.

No encontré una buena manera de hacerlo hasta ahora.

Ideas que probé

2 para bucles

for(Object objectA : objectList){
    for(Object objectB : objectList){
        if(condition){
            // create new object
            // add to list
        }
    }
}

Problema: necesito marcar un poco los pares ya emparejados, de lo contrario, se obtendrán dos objetos creados para el mismo par que quiero evitar. Funciona, pero probablemente no es la mejor solución.

Iteradores

Al igual que la versión con dos forloops, utilicé un iterador y eliminé el par de objetos ya coincidentes de la lista. Funciona pero no parece tan bueno?

Java8 para cada uno y eliminar si

objectList.stream().forEach(posA -> {
    objectList.removeIf(posB -> condition);
});

Problema: ¿Cuándo crearía mi objeto par de objetos ...?

Pregunta

¿Cuál es la mejor idea, o hay una solución mejor que no obtuve?

Respuestas a la pregunta(4)

Su respuesta a la pregunta