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 null
zijn.
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 null
uitgevoerd
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 null
zijn, 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 null
VALUE, is het niet mogelijk om te zien of een invoer in de kaart aanwezig is of een null
waarde 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 null
waarden 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);