2017-06-07 6 views
0

Ich verwende Grails. Ich möchte die Werte in Map bedingt setzen. Für ZB:Wie setze ich den Wert in hashmap key: Wertpaar bedingt?

HashMap<String, String> mymap= new HashMap<String, String>(); 
    if (author != null){ 
     mymap['TITLE'] = book.title 
    }else{ 
     mymap['TITLE'] = 'NA' 
    } 

Also, was ich acheive wollen ist, möchte ich den Wert meines Titels als „book.title“ setzen, wenn der jeweilige Wert ansonsten nicht null ist, sollte es eine normale Zeichenfolge sein " N/A".

Ausgang Ich bin Erste

mymap:[TITLE: NA] 

Ausgang Ich möchte

mymap:[TITLE: [TITLE1, TITLE2, NA, TITLE4, TITLE5]] 

so etwas wie dieses

Vielen Dank im Voraus.

Antwort

1

Sie verwenden groovy all dies kann eleganter geschehen:

Sie von irgendwo bekommen Iteration des Buches werden müssen?

Ändern Sie diese aus:

HashMap<String, String> mymap= new HashMap<String, String>(); 
    if (author != null){ 
     mymap['TITLE'] = book.title 
    }else{ 
     mymap['TITLE'] = 'NA' 
    } 

zu:

List titles=[] 
books?.title?.each { title-> 
    titles<< (title?:'NA') 
} 
def mymap=['TITLE':titles] 
+0

Brilliant gearbeitet ......! :) Aber gibt es eine Möglichkeit, dass ich die Null-Werte in meiner Liste vermeiden könnte? Für zB bekomme ich diese Ausgabe: [title1, title2, NA, null, NA, null] Wie kann ich 'Null' durch 'NA' ersetzen? –

+0

klingt, als ob diese Nullen keine Nullen sein könnten, wie in echten groovigen Nullen, da 'titles << (title?: 'NA') genau das tut, also vielleicht durch 'if (! Title || title! =' Null ') {titles << title} 'Ich habe das Gefühl, dass diese Nullen keine echten Nullen sind. – Vahid

+0

' each' ist für Nebeneffekte. Verwenden Sie stattdessen 'collect'. – cfrick

0

Verwenden Sie stattdessen:

HashMap<String, List<String>> map = new HashMap<String, List<String>>(); 
List<String> myList = new ArrayList<String>(); 
if (author != null){ 
    myList.add(book.title) 
}else{ 
    myList.add('NA')  
} 
map.put("TITLE",myList) ; 
+0

Funktioniert nicht. Meine Liste zeigt mir immer noch Nullwerte. –

0

Kürzere Variante:

HashMap<String, List<String>> map = [:].withDefault{ [] } 
map[ 'TITLE' ] << (author ? book.title : 'NA') 
Verwandte Themen