Самый быстрый способ вставить это в карту (не того формата, который вы хотели, а карту все равно), это сделать что-то вроде:
String[] example = [
"/company_1/user_1/1.txt",
"/company_1/user_1/2.txt",
"/company_1/user_1/3.txt",
"/company_1/user_1/4.txt",
"/company_1/user_2/5.txt",
"/company_1/user_2/6.txt",
"/company_1/user_3/7.txt"
]
example*.tokenize( '/' ).groupBy( { it[ 0 ] }, { it[ 1 ] } )
Это дает вам карту:
[
"company_1": [
"user_1":[
["company_1", "user_1", "1.txt"],
["company_1", "user_1", "2.txt"],
["company_1", "user_1", "3.txt"],
["company_1", "user_1", "4.txt"] ],
"user_2":[
["company_1", "user_2", "5.txt"],
["company_1", "user_2", "6.txt"] ],
"user_3":[
["company_1", "user_3", "7.txt"] ]
]
]
очевидно, требуется немного больше работы, чтобы перевести его в указанный вами формат: - /
edit
Думаю, я его получил ...
def crunch( k, v ) {
( v instanceof List ) ?
[ name:k, children:v.collect { [ name : it[ -1 ] ] } ] :
[ name:k, children:v.collect { k2, v2 -> crunch( k2, v2 ) } ]
}
def rsltList = example*.tokenize( '/' ).groupBy( { it[ 0 ] }, { it[ 1 ] } ).collect { k, v ->
crunch( k, v )
}
означает, что rsltList
является списком, содержащим:
[
[ "name":"company_1",
"children": [
[ "name":"user_1",
"children": [
[ "name":"1.txt" ],
[ "name":"2.txt" ],
[ "name":"3.txt" ],
[ "name":"4.txt" ] ] ],
[ "name":"user_2",
"children": [
[ "name":"5.txt" ],
[ "name":"6.txt" ] ] ],
[ "name":"user_3",
"children": [
[ "name":"7.txt" ]]]
]
]
]