Подтвердить что ты не робот

HashMaps и Null значения?

Как вы передаете нулевые значения в HashMap?
Следующий фрагмент кода работает с параметрами, заполненными:

HashMap<String, String> options = new HashMap<String, String>();  
options.put("name", "value");
Person person = sample.searchPerson(options);  
System.out.println(Person.getResult().get(o).get(Id));    

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

options.put(null, null);  
Person person = sample.searchPerson(null);    

options.put(" ", " ");  
Person person = sample.searchPerson(null);    

options.put("name", " ");  
Person person = sample.searchPerson(null);  

options.put();  
Person person = sample.searchPerson();    
4b9b3361

Ответ 1

HashMap поддерживает обе клавиши null и значения

http://docs.oracle.com/javase/6/docs/api/java/util/HashMap.html

... и разрешает нулевые значения и нулевой ключ

Итак, ваша проблема, вероятно, не сама карта.

Ответ 2

Вы можете учитывать следующие возможности:

1. Значения, введенные на карте, могут быть null.

Однако с несколькими ключами и значениями null он будет принимать только пару значений ключа .

Map<String, String> codes = new HashMap<String, String>();

codes.put(null, null);
codes.put(null,null);
codes.put("C1", "Acathan");

for(String key:codes.keySet()){
    System.out.println(key);
    System.out.println(codes.get(key));
}

вывод будет:

null //key  of the 1st entry
null //value of 1st entry
C1
Acathan

2. ваш код выполнит null только один раз

options.put(null, null);  
Person person = sample.searchPerson(null);   

Это зависит от реализации вашего метода searchPerson если вы хотите, чтобы несколько значений были null, вы можете реализовать соответственно

Map<String, String> codes = new HashMap<String, String>();

    codes.put(null, null);
    codes.put("X1",null);
    codes.put("C1", "Acathan");
    codes.put("S1",null);


    for(String key:codes.keySet()){
        System.out.println(key);
        System.out.println(codes.get(key));
    }

выход:

null
null

X1
null
S1
null
C1
Acathan

Ответ 3

Кажется, вы пытаетесь вызвать метод с параметром Map. Таким образом, для вызова с именем пустого человека правильный подход должен быть

HashMap<String, String> options = new HashMap<String, String>();
options.put("name", null);  
Person person = sample.searchPerson(options);

Или вы можете сделать это так:

HashMap<String, String> options = new HashMap<String, String>();
Person person = sample.searchPerson(options);

Использование

Person person = sample.searchPerson(null);

Может получить исключение нулевого указателя. Все зависит от реализации метода searchPerson().

Ответ 4

Хорошая практика программирования для избегает наличия значений null в Map.

Если у вас есть запись с null значением, то невозможно определить, присутствует ли запись на карте или имеет значение null, связанное с ней.

Вы можете определить константу для таких случаев (Пример: String NOT_VALID = "#NA"), или вы можете иметь ключи хранения других коллекций, которые имеют значения null.

Подробнее см. ссылку .

Ответ 5

В соответствии с вашим первым программным snipet, кажется, хорошо, но у меня такое же поведение, вызванное плохой программированием. Вы проверили, что переменная "options" не имеет значения null до статического вызова?

Я использую Struts2 (2.3.3) webapp и использую HashMap для отображения результатов. Когда выполняется (в классе, инициализированном классом Action):

if(value != null) pdfMap.put("date",value.toString());
else pdfMap.put("date","");

Получена эта ошибка:

Struts Problem Report

Struts has detected an unhandled exception:

Messages:   
File:   aoc/psisclient/samples/PDFValidation.java
Line number:    155
Stacktraces

java.lang.NullPointerException
    aoc.psisclient.samples.PDFValidation.getRevisionsDetail(PDFValidation.java:155)
    aoc.action.signature.PDFUpload.execute(PDFUpload.java:66)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    ...

Кажется, что NullPointerException указывает на метод put (строка номер 155), но проблема в том, что ранее карта не была инициализирована. Он скомпилирован нормально, поскольку переменная находится вне метода, который устанавливает значение.

Ответ 6

вы можете сделать это вот так:

String k = null;
String v = null;
options.put(k,v);