Por lo tanto, tengo un objeto, que tiene un HashMap en su interior (por supuesto, con el correspondiente captador y colocador).
public class ObjA {
private HashMap<String, Boolean> mymap;
...
}
Entonces, tengo otra clase con una lista de los objetos (y correspondientes getters / setters):
public class ObjB {
private List<ObjA> list;
...
}
A continuación, una tercera clase CheckerClass
tiene que comprobar cuántos ObjA
en la lista en el interior ObjB
tiene el mismo mapa (significa esto mismas claves y los mismos valores para cada tecla).
Mi primer pensamiento fue: el bucle list
, y para cada uno ObjA
analice su mapa a una String
. Recoge todas las parsings en una Collection
, y luego contar duplicados. Pero quiero eficientes algo más memoria, y más elegante: usted sabe, leer fácilmente. Y no estoy seguro de cómo conseguirlo.
Aquí está una manera de crear un recuento de cada mapa único:
list.stream().collect(Collectors.groupingBy(ObjA::getMyMap, Collectors.counting());
Esto funciona porque Map.equals
hace exactamente lo que quiere: comprueba si los conjuntos de claves son los mismos y se asignan a valores iguales.
De manera que para cada mapa único se puede encontrar el número de veces que aparece en la lista. O si lo desea específicamente a saber cuántas copias existen, a continuación, utilizar .values().stream().filter(c -> c > 1).count()
el mapa resultante.