groovy에서list를 여러 속성으로 그룹화

10773 단어 work
,code,language,content 조합을 키로 하고 이런 키와 같은 요소를List에 넣습니다.그리고 이 키랑 리스트를 맵에 넣어주세요.
import com.ittx.cbt.util.ObjectMapperFactory
import org.json.JSONArray
import org.json.JSONObject

def errorCodeList = [
        [id:1,code: "1", language: "2", content: "3"],
        [id:2,code: "1", language: "2", content: "4"],
        [id:3,code: "1", language: "3", content: "5"],
        [id:4,code: "1", language: "3", content: "6"],
        [id:5,code: "2", language: "1", content: "3"],
        [id:6,code: "2", language: "2", content: "3"],
        [id:7,code: "1", language: "2", content: "4"]
]


Map<String,List> result = new HashMap()
List tempList = new ArrayList()
def c =  errorCodeList.groupBy {
    it.code
}.collectEntries({k,v->
    [
            (k) : v.groupBy({
                    it.language
                    }).collectEntries({ k2,v2->
                [(k2) : v2.groupBy({
                    it.content
                }).collectEntries({k3,v3->

                    [(k3):v3.collect({
                        String key = "${it.code}_${it.language}_${it.content}"
                        if(result.keySet().contains(key)){
                            tempList = result.get(key)
                            tempList.add(it)
                            //result.put(key,tempList)
                        }else {
                            tempList = new ArrayList()
                            tempList.add(it)
                            result.put(key,tempList)
                        }
                        it
                    })]
                })]
            })

    ]
})
println new JSONObject(result)

좋은 웹페이지 즐겨찾기