Объединить массив строк в Kotlin из класса данных

#android #kotlin

#Android #kotlin

Вопрос:

У меня есть такие данные Class , как

 data class Data(val string: String, val state: Boolean)
 

и этот класс представляет собой массив, подобный

 val data = ArrayList<Data>()
data.add(Data("String 1", false)
data.add(Data("String 2", true)
data.add(Data("String 3", true)
data.add(Data("String 4", false)
 

Мне нужно объединить только true такие строки, как

 val result = "String 2;String 3"
 

Я взглянул на joinToString() метод, но понятия не имею, как поступить в этом случае. Еще одна вещь заключается в том, что мне нужно позже вернуть эти объединенные строки обратно в виде массива.

Как оптимально этого добиться?

Ответ №1:

Что-то такое простое, как это :

         val result = data.asSequence()
           .filter(Data::state)
           .map(Data::string)
           .joinToString(separator = ";")
 

Результат :

String 2;String 3

Затем :

result.split(";")

Комментарии:

1. Ты потрясающий! Я дрейфовал, и в результате мне просто нужно было сделать еще один шаг, чтобы получить этот результат! Большое вам спасибо.

2. Нет проблем, стоит отметить, что при переборе любой коллекции asSequence она преобразуется в a Sequence и лениво собирается в результате терминала, а не просто в коллекцию, которая охотно собирается при каждом преобразовании или операторе. Seqience во многих отношениях сродни Java stream api.

Ответ №2:

Сначала вам нужно отфильтровать свой список. И затем вы можете использовать метод joinToString.

 val result : String = data.filter { it.state }.joinToString(seperator = ";") { it.string }
 

После этого вы можете преобразовать строку в список строк следующим образом :

 val list = result.split(";")