Вам понадобится еще одно сообщение для представления внутреннего списка.
message M1 {
repeated M2 mylist = 1;
}
message M2 {
repeated string mylist = 1;
}
Конечно, вы можете добавить столько полей, сколько захотите, в M2, и вам понадобится отдельная логика преобразованиячтобы собрать List<M2>
в ArrayList<ArrayList<String>>
.
Возможно, вы даже захотите создать повторно используемое сообщение для представления списка строк:
message M1 {
repeated StringList mylist = 1;
}
message StringList {
repeated string value = 1;
}