#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
она преобразуется в aSequence
и лениво собирается в результате терминала, а не просто в коллекцию, которая охотно собирается при каждом преобразовании или операторе. Seqience во многих отношениях сродни Java stream api.
Ответ №2:
Сначала вам нужно отфильтровать свой список. И затем вы можете использовать метод joinToString.
val result : String = data.filter { it.state }.joinToString(seperator = ";") { it.string }
После этого вы можете преобразовать строку в список строк следующим образом :
val list = result.split(";")