Java: представление карты, которое скрывает запись с нулевым ключом? - PullRequest
0 голосов
/ 05 мая 2011

У меня есть Map<String,String>, который содержит специальное значение с нулевым ключом.Это не так легко изменить, поэтому у меня этого нет.

Есть ли способ сделать одно из следующего:

  • сделать эту карту, которая такжеMap<String,String>, в котором скрыта запись с нулевым ключом
  • создает представление keySet() карты, в котором скрывается запись с нулевым ключом

Под «видом» я имею в виду измененияна карте производят изменения в виде.

Я предполагаю, что последнее легче, но я не знаю, как это сделать.

Ответы [ 3 ]

0 голосов
/ 05 мая 2011

Если значение с нулевым ключом является особым случаем и не предназначено для использования при доступе к записям, почему оно отображается на карте?Есть ли причина, по которой вы решили поместить ее на карту вместо другой строковой переменной?

Похоже, было бы проще использовать другой подход, чем пытаться расширить карту, чтобы иметь некоторые специальные свойствадля этого одного случая.Это также было бы более очевидно, если бы было показано, что это строковое значение является особым значением, а не тем, что может сбить с толку будущих разработчиков, которым придется смотреть на этот код после вас.

0 голосов
/ 05 мая 2011

Я использовал Guava's Maps.filterKeys(); это работало нормально.

 Maps.filterKeys(mymap, new Predicate<String>() {
    @Override public boolean apply(String key) { return key != null; } 
 }),
0 голосов
/ 05 мая 2011

Простой метод состоит в том, чтобы расширить вашу карту и переопределить надлежащие методы для проверки значений нулевого ключа. Это будет:

containsKey(Object key)
entrySet() 
get(Object key) 
keySet() 
put(K key, V value) 
putAll(Map<? extends K,? extends V> m) 

Вы также можете реализовать свой собственный объект, расширяющий Map, и передать свой Map-with-null в конструкторе и выполнить проверку / управление при вызове одного из вышеуказанных методов.

Если вы открыты для внешних библиотек, вы можете взглянуть на PredicatedMap .

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