2016-12-20 8 views
0

マップに値を設定するSetに値を追加します。 すなわちMap <String,HashSet<String>> ... 私のコードは次のとおりです。List/Setのadd関数はブール値を表示します。

ここ
fieldMap = new LinkedHashMap<String, HashSet<String>>(); 

    if(fieldMap.get(qName)!=null){ 
            HashSet<String> tempSet = fieldMap.get(qName); 
            tempSet.add(//String); 
            fieldMap.put(qName, tempSet);} 

私は直接のように値を入れたいと思った: fieldMap.put(qName,fieldMap.get(qName).add(//String)) ..だから私は、ループ内で上記の3行を置き換えることができます。 しかし、私が 'add'関数を与えると、エラーメッセージは次のようになります: "HashMap<String,HashSet<String>>The method put(String, HashSet<String>)は引数(String, boolean)には該当しません"。 誰もがこのエラーが来る理由を説明することができます..また、これをステップバイステップでのみ実行する必要がありますか?

答えて

1

Set.addは、セットではなくブール値を返します。ブール値の戻り値は、値がセットに追加されたかどうかを示します。したがって、マップに値としてブール値を追加しようとしています。

ただし、マップにセットを追加しておく必要はありません。あなただけのセットを取得し、それに新しい値を追加することができます

if (fieldMap.containsKey(qName)) 
    fieldMap.get(qName).add(value); 
+0

fieldMap.get(qName).add(value);この行には上記の指定されたエラーが表示されます – Kaira

+0

申し訳ありません。エラーは "HashMap型のput(String、HashSet)メソッドは引数(String、boolean)には適用されません"というエラーです。私が提供したステートメントには「put」メソッドはありません。そのため、エラーを返すことはできません。 – sprinter

+0

これは正しいだけです..!どうもありがとうございました.. – Kaira

1

これはMap<K,V>で新しいJava 8の方法を具体的にするために設計されているものである:あなたのケースでは

V computeIfAbsent(K key, Function<? super K,? extends V> mappingFunction) 

fieldMap.computeIfAbsent(qName, k->new HashSet<>()).add(someString); 

computeIfAbsentは、qNameの存在をチェックします。存在しない場合は、「マッピング関数」(new HashSet<>())が呼び出され、結果がMapに追加されます。次に、値(既存の値または新たに追加された値)が返され、でadd()を呼び出して終了します。

関連する問題