2017-12-01 18 views
1

以下のコードでドキュメントのマップを取得しています。新しいキー&の値をドキュメントオブジェクトに追加します。新しいキー値をJavaの既存のリストマップオブジェクトに追加する方法

public List<Map<String, Object>> getDocuments() { 
    String sql = "Select * from docs"; 
    List<Map<String, Object>> Documents = jdbcTemplateObject.queryForList(sql); 
    return Documents; 
} 

は出力:

[{Id=DOC10,Name=Test Document,Date=10-12-17}], 
[{Id=DOC11,Name=Sample Document,Date=15-12-17}] 

出力は次のようになりますように、私はこのList<Map>オブジェクトに新しいK、Vを追加することができますどのように?

[{Id=DOC10,Name=Test Document,Date=10-12-17,Access=true}], 
[{Id=DOC11,Name=Sample Document,Date=15-12-17,Access=true}] 
+0

ないが、オブジェクト> '単に' put( "Access"、true) 'で、これは' ResultSet'から行われ、私が信じる 'true/false'の値を得るべきです。あなたのメソッドのロジックに応じて 'select *、true to docsからアクセスする 'ことができます。 – AxelH

+0

これはむしろ奇妙な要求のようです。通常、SQL結果セットに手動でデータを追加することはありません。たぶんあなたはあなたがこれをやる必要があると思う理由を説明することができます。 –

+0

私はその変数をJava仕様書ごとに小文字にします。 "ドキュメント" –

答えて

6

あなただけのリストを反復処理し、各マップに新しいキーと値のペアを追加することができます。

for(Map<String, Object> map : Documents){ 
    map.put("Access", true); 
} 
+0

すでに反復されていますが、java.util.ConcurrentModificationExceptionとして例外がスローされます – user1909711

+0

Java 8のバージョン: 'documents.forEach(doc - > doc.put(" Access "、true));' –

+0

@ user1909711リストまたはマップ他のスレッドによって変更されています。イテレータまたは通常の 'for'ループを使用してみてください。 – Titus

0

別の解決策を、あなたのクエリに値を追加することです何jdbcTemplateObject.queryForList(sql);行うに依存。

select *, 1 as Access from docs 

これは、Mapに挿入するために各列を繰り返しているようです。

注:クエリは必ずしもDBMSに依存しません。ブールは本当にあなたが `地図<文字列を使用しているSQL型のリストの上に

0

反復>ドキュメントマップオブジェクトを取得し、そのMapオブジェクト e。で、キーと値のペアを入れ&、グラム

List<Map<String, Object>> Documents = jdbcTemplateObject.queryForList(sql); 
    for (Map<String, Object> map : Documents) { 
     map.put(key, value); 
    } 
関連する問題