Могу ли я изменить карту через Keyset - PullRequest
5 голосов
/ 25 апреля 2011

Я пытаюсь применить фильтр к карте. Цель состоит в том, чтобы сохранить только те ключи, которые являются частью набора. Следующая реализация обеспечивает требуемые результаты, но я хочу знать, если это правильный путь?

private void filterProperties(Map<String, Serializable> properties, Set<String> filterSet) {
    Set<String> keys = properties.keySet();
    keys.retainAll(filterSet);
}

Ответы [ 3 ]

6 голосов
/ 25 апреля 2011

Да!

Набор поддерживается картой, поэтому изменения в карте отражаются в наборе, и наоборот

(см .: https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/HashMap.html#keySet())

2 голосов
/ 25 апреля 2011

Ответ Итая правильный, однако вы должны убедиться, что properties не изменен другими потоками или сам по себе является потокобезопасной Map реализацией.

Если Map не является поточно-ориентированным (например, HashMap) и изменено другим потоком, вы можете получить ConcurrentModificationException.

0 голосов
/ 25 апреля 2011

ваш код выглядит хорошо.Вы можете написать одну строку как properties.keySet().retainAll(filterSet);

Одна проблема, которую я вижу, состоит в том, что карта может быть неизменяемой.Если это возможно, возможно, будет лучше построить новую карту с исходным набором записей, а затем отфильтровать и вернуть ее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...