【问题标题】:How to convert EnumSet<A> to Set<B>如何将 EnumSet<A> 转换为 Set<B>
【发布时间】: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&lt;SomeType&gt;

如果我有一个:

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

过滤后的结果应该是,

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

我的想法是将someTypeSet 转换为Set&lt;String&gt;,然后执行以下操作:

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 }跨度>

标签: kotlin enums set enumset


【解决方案1】:

您可以在任何集合上使用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 }

【讨论】:

    【解决方案2】:

    过滤相关类型后即可使用map函数。

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

    它将返回带有相关 ID 的 Something 列表。

    【讨论】:

      猜你喜欢
      • 2011-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-02
      • 1970-01-01
      • 1970-01-01
      • 2012-09-03
      • 2021-09-17
      相关资源
      最近更新 更多