Groovy列表转换

时间:2010-01-04 02:09:28

标签: groovy

我在groovy中遇到一个问题,试图弄清楚如何将单个项目转换为列表。我有一个传入变量params.contacts,它可以是单个值(例如14),也可以是值数组(例如14,15)。我想把它变成一个列表。以前,我只是说params.contacts.toList(),但是这个代码在单个项目时失败了。它将取值14并将其分成[1,4]列表。

有没有一种简单,优雅的方法来处理这个问题?

1 个答案:

答案 0 :(得分:8)

一种简单的方法,将其放入列表并展平:

def asList(orig) {
    return [orig].flatten()
}

assert [1, 2, 3, 4] == asList([1, 2, 3, 4])
assert ["foo"] == asList("foo")
assert [1] == asList(1)

这样做的一个问题是它会完全平整事物,所以这不是一个好方法,因为它会使列表中的列表变平:

assert [[1, 2], [3, 4]] == asList([[1, 2], [3, 4]])  // fails!

另一种方法是使用类型系统:

def asList(Collection orig) {
    return orig
}

def asList(orig) {
    return [orig]
}

assert [1, 2, 3, 4] == asList([1, 2, 3, 4])
assert ["foo"] == asList("foo")
assert [1] == asList(1)
assert [[1, 2], [3, 4]] == asList([[1, 2], [3, 4]])  // works!

在这里,我们让类型系统为我们完成所有繁重的工作。如果我们已经有了收藏品,那就回去吧。否则,将其变为列表。我们在groovy中仍然可以使用Java中的这样的技巧,当问题出现时,我们不应该完全抛弃它们。