2017-12-01 11 views
1

아래 코드에서 문서의지도를 가져 오는 중 문서 객체에 새 키 & 값을 추가하고 싶습니다.Java의 기존 List Map 객체에 새 키 값을 추가하는 방법

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> 객체에 V, 새로운 K를 추가 할 수 있습니까?

[{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 from 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

으로 반복> 문서지도 개체를받을 수 있도록지도 객체 전자에서 키 값 쌍을 넣어 &, g

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