如何将 EnumSet<A> 转换为 Set<B>
How to convert EnumSet<A> to Set<B>
我有一个枚举 class 是这样的:
enum class SomeType(val id: String) {
TYPE1("A"),
TYPE2("B"),
TYPE3("C"),
TYPE4("D")
}
现在,我需要筛选 Something
的列表,其中包含一个在 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")
)
现在我需要根据给定的 EnumSet<SomeType>
过滤 somethingList
。
所以如果我有一个:
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
吗?
我也解释了整个过程,以防万一上面的问题有更好的解决方案。
不胜感激。
提前致谢。
筛选相关类型后即可使用map
功能
val filteredSomethings:List<Something> = someTypeSet.filter { something ->
setOfSomeTypeIds.contains(something.id) }.map { Something(it.id) }
它会 return 一个包含 Something
和相关 ID 的列表。
您可以使用map
on any collection to transform it to a new collection with the desired values... i.e. someTypeSet.map { it.id }
will already return you a list of string. If you really want to have a Set
you can also use something like mapTo
. Regarding the filter
that might also be simplifiable using the in
-关键字,例如:somethingList.filter { it.id in setOfSomeTypeIds }
.
如此总结:
val setOfSomeTypeIds = someTypeSet.map { it.id }
val filteredList = somethingList.filter { it.id in setOfSomeTypeIds }
我有一个枚举 class 是这样的:
enum class SomeType(val id: String) {
TYPE1("A"),
TYPE2("B"),
TYPE3("C"),
TYPE4("D")
}
现在,我需要筛选 Something
的列表,其中包含一个在 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")
)
现在我需要根据给定的 EnumSet<SomeType>
过滤 somethingList
。
所以如果我有一个:
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
吗?
我也解释了整个过程,以防万一上面的问题有更好的解决方案。
不胜感激。
提前致谢。
筛选相关类型后即可使用map
功能
val filteredSomethings:List<Something> = someTypeSet.filter { something ->
setOfSomeTypeIds.contains(something.id) }.map { Something(it.id) }
它会 return 一个包含 Something
和相关 ID 的列表。
您可以使用map
on any collection to transform it to a new collection with the desired values... i.e. someTypeSet.map { it.id }
will already return you a list of string. If you really want to have a Set
you can also use something like mapTo
. Regarding the filter
that might also be simplifiable using the in
-关键字,例如:somethingList.filter { it.id in setOfSomeTypeIds }
.
如此总结:
val setOfSomeTypeIds = someTypeSet.map { it.id }
val filteredList = somethingList.filter { it.id in setOfSomeTypeIds }