在Groovy中,有没有办法安全地索引到类似于安全导航操作符的Collection?

时间:2010-12-22 18:53:27

标签: groovy

这将安全地返回null而不会抛出任何异常

obj?.prop1?.prop2

如何在集合中执行此操作,它不会抛出索引超出范围的异常?

myarray[400]  //how do I make it return null if myarray.size() < 400 

收藏品是否有这样的运营商?

2 个答案:

答案 0 :(得分:39)

这是除了groovy中的数组之外的所有集合的默认行为。

assert [1,2,3,4][5] == null
def test = new ArrayList()
assert test[100] == null
assert [1:"one", 2:"two"][3] == null

如果您有阵列,请将其投射到列表中。

def realArray = new Object[4]
realArray[100] // throws exception
(realArray as List)[100] // null

您可以使用与?运算符相同的方式将列表和映射索引与字符串相同:

def myList = [[name: 'foo'], [name: 'bar']]
assert myList[0]?.name == 'foo'
assert myList[1]?.name == 'bar'
assert myList[2]?.name == null

答案 1 :(得分:1)

您可以使用get()代替:

myarray?.get(400)