Как конвертировать EnumSet <A>в Set <B> - PullRequest
0 голосов
/ 23 апреля 2019

У меня есть класс enum, который выглядит примерно так:

enum class SomeType(val id: String) {
    TYPE1("A"),
    TYPE2("B"),
    TYPE3("C"),
    TYPE4("D")
}

Теперь мне нужно отфильтровать список Something со строкой, указанной в enum SomeType.Итак, в основном у меня есть что-то вроде этого:

class Something(val id: String)
// where the value of id is one of the value of the SomeType's id

У меня есть список примерно так:

val somethingList = arrayListOf<Something>(
    Something("A"),
    Something("B"),
    Something("A"),
    Something("C"),
    Something("D"),
    Something("A"),
    Something("D")
)

Теперь мне нужно отфильтровать это somethingList по заданному EnumSet<SomeType>.

Так что, если у меня есть:

val someTypeSet = EnumSet.of(SomeType.Type3, SomeType.Type2)

, результирующий отфильтрованный список должен быть

val filteredList = arrayListOf<Something>(
    Something("B"),
    Something("C")
)

Моя идея состоит в том, чтобы преобразовать someTypeSet вSet<String> и просто сделайте что-то вроде:

Set<String> setOfSomeTypeIds = convertToSet(someTypeSet)
val filteredList = somethingList.filter { something ->
    setOfSomeTypeIds.contains(something.id)
}

Может кто-нибудь подсказать мне, как преобразовать EnumSet в Set его значения?

Я также объяснил весь процессна всякий случай есть лучшее решение проблемы выше.

Все будет оценено.

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 23 апреля 2019

Вы можете использовать map в любой коллекции, чтобы преобразовать ее в новую коллекцию с требуемыми значениями ... т.е. someTypeSet.map { it.id } уже вернет вам список строк.Если вы действительно хотите иметь Set, вы также можете использовать что-то вроде mapTo.Относительно filter, которое также можно упростить, используя ключевое слово in, например: somethingList.filter { it.id in setOfSomeTypeIds }.

Суммировано:

val setOfSomeTypeIds = someTypeSet.map { it.id }

val filteredList = somethingList.filter { it.id in setOfSomeTypeIds }
1 голос
/ 23 апреля 2019

Вы можете использовать функцию map после фильтрации соответствующих типов.

val filteredSomethings:List<Something> = someTypeSet.filter { something ->
            setOfSomeTypeIds.contains(something.id) }.map { Something(it.id) }

Возвращается список Something с соответствующими идентификаторами.

...