【发布时间】:2019-04-23 08:52:15
【问题描述】:
我有一个类似这样的枚举类:
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")
)
现在我需要将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 的价值吗?
我还解释了整个过程,以防万一上面的问题有更好的解决方案。
任何事情都会受到赞赏。
提前致谢。
【问题讨论】:
-
您可以在任何集合上使用
map将其转换为具有所需值的新集合...即someTypeSet.map { it.id }已经返回给您一个字符串列表。如果你真的想要一个Set,你也可以使用mapTo之类的东西。关于filter,也可以使用in-关键字来简化,例如:somethingList.filter { it.id in setOfSomeTypeIds } -
哇,谢谢!您可以将其发布为答案,以便我标记它。另外,有没有比我做的更好的想法?
-
我想到的唯一更好的主意是在
Something类本身上重用枚举类型SomeType... 这样你就可以写如下内容:somethingList.filter { it.type in someTypeSet }跨度>