Заполните свойства объекта из массива String - PullRequest
0 голосов
/ 13 мая 2019

Если у нас есть объект в groovy, например Customer [имя, адрес электронной почты, телефон] и строка в форме

String infoLine = "Stanislav,stanislav@stackoverflow.com,004612345678" 

Какой самый простой способ проанализировать эту строку и заполнить поля этого объекта?

(пример строки, которую мы можем разделить, поэтому вопрос из массива String)

1 Ответ

2 голосов
/ 13 мая 2019

Если у вас есть конструктор

Customer(String name, String email, String phone)

Вы можете сделать:

new Customer(*infoLine.split(','))

Если вы не хотите писать конструктор, вы можете заставить Groovy создать его для вас:

import groovy.transform.*

@TupleConstructor
class Customer {
    String name
    String email
    String phone
}

String infoLine = "Stanislav,stanislav@stackoverflow.com,004612345678" 

new Customer(*infoLine.split(','))

Или даже лучше, @Immutable, поскольку это делает свойства final

@Immutable
class Customer {
    String name
    String email
    String phone
}

Другой вариант (при условии, что ваши поля определены в порядке их появления в строке, а других полей нет) - это сгенерировать карту [name: 'aaa', emai... etc и сообщить groovy, чтобы преобразовать карту в Customer как :

class Customer {
    String name
    String email
    String phone
}

String infoLine = "Stanislav,stanislav@stackoverflow.com,004612345678" 

def customer = [
    Customer.declaredFields.findAll { !it.synthetic }*.name,
    infoLine.split(',')
].transpose().collectEntries() as Customer

Но это кажется хрупким, и, вероятно, быстрее добавить аннотацию или конструктор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...