Как проверить наличие нулевых ключей в любой реализации Java-карты? - PullRequest
0 голосов
/ 11 сентября 2018

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

if ( map.containsKey(null) ) …

, но это сломается, если метод будет передан примерно как TreeMap, который согласно общему контракту Java Map свободен для отклонения пустых ключейс NPE .

Есть ли у нас разумный способ проверить наличие нулевых ключей при принятии любой реализации Map?

Ответы [ 3 ]

0 голосов
/ 11 сентября 2018
boolean hasNullKey(Map<?,?> map) {
  try {
    return map.containsKey(null);
  } catch (NullPointerException e) {
    return false;
  }
}

Обратите внимание, что это также возвращает false, когда map само по себе равно null, что может или не может быть желательным.

0 голосов
/ 11 сентября 2018

Используйте instanceof, чтобы найти древовидную карту

boolean hasNullKey(Map<?,?> map) {
    return map instanceof TreeMap ? false :map.containsKey(null);
}
0 голосов
/ 11 сентября 2018
boolean hasAnyNull = yourMap.keySet()
      .stream()
      .anyMatch(Objects::isNull);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...