减去 groovy 中的枚举元素
Subtracting Enum elements in groovy
假设我们有一个枚举:
enum MyEnum
{
ONE, TWO
}
我们可以使用以下方法轻松地相互减去 MyEnum 值:
def a = MyEnum.values()
println (a - MyEnum.values()) //results: []
但是如果我们尝试使用强类型,我们不会收到空列表:
Collection<MyEnum> a = MyEnum.values()
println (a - MyEnum.values()) //results: [ONE, TWO]
我们应该使用什么类型来正确减去 MyEnum 值,为什么?
鉴于 E.values()
的 return 类型是 E[]
显而易见的答案
会是
MyEnum[] a = MyEnum.values()
两个数组“相减”的方式定义在
org.codehaus.groovy.runtime.DefaultGroovyMethods
:
public static <T> T[] minus(T[] self, Object[] removeMe) {
但是如果您使用的是“collection-y”,则使用这个(例如这里的 Set
):
public static <T> Set<T> minus(Set<T> self, Object removeMe)
(只有给定的 元素 将被删除 - 而不是每个元素)。
所以如果你想要一些“collection-y”,那么你也必须打开
数组变成可迭代的东西或“collection-y”。例如。这也适用:
Set<MyEnum> a = MyEnum.values()
println (a - MyEnum.values().toList())
// → []
如果你想要明确,你也可以使用像这样的函数
removeAll
.
假设我们有一个枚举:
enum MyEnum
{
ONE, TWO
}
我们可以使用以下方法轻松地相互减去 MyEnum 值:
def a = MyEnum.values()
println (a - MyEnum.values()) //results: []
但是如果我们尝试使用强类型,我们不会收到空列表:
Collection<MyEnum> a = MyEnum.values()
println (a - MyEnum.values()) //results: [ONE, TWO]
我们应该使用什么类型来正确减去 MyEnum 值,为什么?
鉴于 E.values()
的 return 类型是 E[]
显而易见的答案
会是
MyEnum[] a = MyEnum.values()
两个数组“相减”的方式定义在
org.codehaus.groovy.runtime.DefaultGroovyMethods
:
public static <T> T[] minus(T[] self, Object[] removeMe) {
但是如果您使用的是“collection-y”,则使用这个(例如这里的 Set
):
public static <T> Set<T> minus(Set<T> self, Object removeMe)
(只有给定的 元素 将被删除 - 而不是每个元素)。
所以如果你想要一些“collection-y”,那么你也必须打开 数组变成可迭代的东西或“collection-y”。例如。这也适用:
Set<MyEnum> a = MyEnum.values()
println (a - MyEnum.values().toList())
// → []
如果你想要明确,你也可以使用像这样的函数
removeAll
.