高效比较Java中的对象列表内的检查映射

Mel*_*Mel 1 java memory collections hashmap

所以,我有一个对象,里面有一个哈希表(当然,还有相应的getter和setter)。

public class ObjA {
   private HashMap<String, Boolean> mymap;
   ...
}
Run Code Online (Sandbox Code Playgroud)

然后,我还有另一个类,其中列出了这些对象(以及相应的getter / setter):

public class ObjB {
   private List<ObjA> list;
   ...
}
Run Code Online (Sandbox Code Playgroud)

然后,第三类 CheckerClass需要检查ObjA列表中的多少个对象ObjB具有相同的映射(这意味着相同的键和每个键的值)。

我最初的想法是:循环list,然后将每个ObjA映射解析为String。收集对的所有分析Collection,然后计算重复项。但是我希望有一些内存效率更高,更优雅的东西:您知道,容易阅读。而且我不确定如何获得它。

spr*_*ter 5

这是创建每个唯一地图计数的一种方法:

list.stream().collect(Collectors.groupingBy(ObjA::getMyMap, Collectors.counting());
Run Code Online (Sandbox Code Playgroud)

这之所以有效Map.equals,是因为它确实满足您的要求:检查键集是否相同并映射为相等的值。

因此,对于每个唯一地图,您都可以找到它出现在列表中的次数。或者,如果您特别想知道有多少个重复项,请.values().stream().filter(c -> c > 1).count()在结果图上使用。