Я думаю, что вы ищете retainAll()
, так что вы можете сравнить только те элементы, которые вас интересуют:
int index = myIndexOf(benefit, find);
...
static int myIndexOf(List<HashMap> benefit, Map find) {
int i = 0;
for (Map map : benefit) {
Map tmp = new HashMap(map);
tmp.keySet().retainAll(find.keySet());
if (tmp.equals(find)) {
return i;
}
i++;
}
return -1;
}
Можно, конечно, объявить свой собственный подкласс List, который переопределяет метод indexOf этим поведением. Тем не менее, я не думаю, что это хорошая идея. Это нарушило бы контракт метода indexOf:
возвращает самый низкий индекс i, такой что (o == null? Get (i) == null: o.equals (get (i)))
Это может сбить с толку тех, кто поддерживает код. Затем вы можете подумать, что вы можете создать подкласс HashMap для переопределения equals, но это нарушит свойство симметрии Object.equals ().