2017-06-07 7 views
0

私はgrailsを使っています。 マップ内の値を条件付きで設定する必要があります。例:の場合 :特定の値がそれ以外の場合は、通常の文字列でなければなりませんnullでない場合ハッシュマップキーに値を設定する方法:条件付きで値のペアを使用しますか?

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

だから、何であるか私はacheiveにしたい、私は "「book.title」としての私のタイトルの値を設定したいですNA "である。

出力I'amは取得

mymap:[TITLE: NA] 

出力は、私は、事前にこの

おかげのような

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

何かをしたいです。あなたがこののグルーヴィーすべてを使用している

答えて

1

は、よりエレガントに行うことができます。

あなたはどこから書籍の反復を取得する必要がありますか?

変更し、このから:

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

へ:この代わりに

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

華麗に働いて......! :) しかし、私のリストにnull値を避ける方法はありますか? 例えば、次のような出力が得られます。 [title1、title2、NA、null、NA、null] 'null'を 'NA'に置き換えるにはどうすればよいですか? –

+0

'title(タイトル?: 'NA')'はこれを正確に実行しているので、実際のgroovyのヌルのようにヌルではないかもしれません。これを 'if(!title || title!= 'null' ){titles << title} '私はそれらのヌルがヌルではないと感じています – Vahid

+0

' each'は副作用です。代わりに 'collect'を使用してください。 – cfrick

0

用途:

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

動作しません。私のリストはまだ私にヌル値を示しています。 –

0

短いバリアント:

HashMap<String, List<String>> map = [:].withDefault{ [] } 
map[ 'TITLE' ] << (author ? book.title : 'NA') 
関連する問題