получение разных пользователей из результирующего набора и конкатата строк в других полях - PullRequest
0 голосов
/ 09 марта 2012

У меня есть Sql ResultSet из запроса.Имеет следующие поля: имя пользователя, отдел, .. ответственность.Есть повторное имя пользователя с разными значениями для deptmt и responseblty.Я хочу получить карту / список уникальных имен пользователей со списком отделов и обязанностей для каждого пользователя в наборе результатов

Так что, если

       resultset =     (Sam, dept1,.. resp1),
                       (Tom, dept1,..resp3),
                       (Sam,dept2,..resp2),
                       (Tom,dept3,..resp3)...etc

, вывод должен быть

 finalList = [["Sam", "dept1,dept2", "resp1,resp2"],["Tom", "dept1,dept3", "resp3"]]

На что следует обратить внимание:
1) Может быть n столбцов, которые являются переменными (список столбцов считывается из файла свойств), поэтому код должен быть адаптируемым._ На данный момент не требуется, это фиксированный список прямо сейчас
2) Все значения заключены в двойные кавычки и разделены запятой.
3) Ответственность за том содержит только resp3 с момента его повторения ... т.е. уникальные значениясписок.

Как преобразовать набор результатов?
Спасибо

Ответы [ 2 ]

2 голосов
/ 09 марта 2012

Более короткая альтернатива решению Билла будет:

def data = [ ['Sam', 'dept1','resp1'],
            ['Tom', 'dept1','resp3'],
            ['Sam', 'dept2','resp2'],
            ['Tom', 'dept2','resp4'] ]

def output = data.groupBy { it[0] }.collect { name, vals -> 
  $/"$name", "${vals*.getAt( 1 ).join(',')}", "${vals*.getAt( 2 ).join(',')}"/$
}

output.each {
  println it
}

Какие отпечатки:

"Sam", "dept1,dept2", "resp1,resp2"
"Tom", "dept1,dept2", "resp3,resp4"
1 голос
/ 09 марта 2012

Это должно приблизить вас.Обратите внимание, что в конечном выводе нет кавычек (Groovy не печатает их для строк).Глядя на код, вы можете видеть, что «выходные данные» - это коллекция списков, каждый из которых содержит 3 элемента: имя, список запятых строк отделов, затем список запятых строк ответственности.1002 * Кстати, вы можете использовать что-то кроме запятой во внутренних строках, если вы хотите создать список запятых в качестве окончательного результата.

def data = [ ['Sam', 'dept1','resp1'],
            ['Tom', 'dept1','resp3'],
            ['Sam', 'dept2','resp2'],
            ['Tom', 'dept2','resp4'] ]


def tmpmap = [:]
data.each { inputrow ->
    def name = inputrow[0]
    def curlist = tmpmap[name]
    if ( curlist == null ) { // first time seeing this name
        curlist = [name,inputrow[1],inputrow[2]]
        tmpmap.put( name, curlist );
    } else { // seen this name before
        curlist[1] += ',' + inputrow[1]
        curlist[2] += ',' + inputrow[2]
    }
}
output = tmpmap.values()
println output    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...