HashMaps en Null-waarden?

Hoe geef je null-waarden door aan een HashMap?
Het volgende codefragment werkt met ingevulde opties:

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));    

Dus het probleem is wat er moet worden ingevoerd in de opties en/of methode om een ​​null-waarde door te geven?
Ik heb de volgende code geprobeerd zonder enig succes:

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();    

Antwoord 1, autoriteit 100%

HashMap ondersteunt zowel null-sleutels als -waarden

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

… en staat null-waarden en de null-sleutel toe

Dus uw probleem is waarschijnlijk niet de kaart zelf.


Antwoord 2, autoriteit 9%

U kunt de onderstaande mogelijkheden noteren:

1. Waarden die op een kaart worden ingevoerd, kunnen nullzijn.

Bij meerdere null-sleutels en -waarden is er echter maar één keer een null sleutelwaardepaar nodig.

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));
}

uitvoer zal zijn:

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

2. uw code wordt slechts één keer nulluitgevoerd

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

Het hangt af van de implementatie van uw searchPerson-methode
als u wilt dat meerdere waarden nullzijn, kunt u dienovereenkomstig implementeren

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));
    }

uitvoer:

null
null
X1
null
S1
null
C1
Acathan

Antwoord 3, autoriteit 3%

Het lijkt erop dat u een methode probeert aan te roepen met een Map-parameter.
Dus, om te bellen met een lege persoonsnaam zou de juiste aanpak moeten zijn

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

Of je kunt het zo doen

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

Gebruik

Person person = sample.searchPerson(null);

Kan je een null-pointer-uitzondering geven. Het hangt allemaal af van de implementatie van de searchPerson()-methode.


Antwoord 4

Het is een goede programmeerpraktijk om te voorkomen dat er null-waarden in een kaartstaan.

Als u een item hebt met nullVALUE, is het niet mogelijk om te zien of een invoer in de kaart aanwezig is of een nullwaarde heeft die ermee is gekoppeld.

U kunt een constante voor dergelijke gevallen definiëren (bijvoorbeeld: String NOT_VALID = "#NA"), of u kunt een andere collectie sleutels hebben die nullwaarden hebben .

Controleer dit link voor meer informatie.


Antwoord 5

Acorderen naar je eerste code Snipet lijkt in orde, maar ik heb een vergelijkbaar gedrag veroorzaakt door slechte programmaking. Hebt u de “opties” -variabele gecontroleerd, niet null vóór de PUT-oproep?

Ik gebruik Struts2 (2.3.3) WebApp en gebruik een hashmap voor het weergeven van resultaten.
Wanneer wordt uitgevoerd (in een klasse geïnitialiseerd door een actieklasse):

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

Kreeg deze fout:

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)
    ...

Lijkt de NULLPOINTEREXCeption-punten op de PACT-methode (lijnnummer 155), maar het probleem was dat DE MAP eerder niet is geïnitialiseerd. Het heeft OK gecompileerd omdat de variabele niet uit de methode is die de waarde instelt.


Antwoord 6

U kunt het waarschijnlijk zo doen:

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

Other episodes