Groovy:比较列表忽略其中元素的顺序

Cat*_*ata 2 groovy list

我有两个清单,比方说:

def list1 = ["ABC", "DEF", "GHI", "JKL"]
def list2 = ["ABC", "DEF", "JKL", "GHI"]
Run Code Online (Sandbox Code Playgroud)

我想比较这两个列表并确保它们的值相同,无论它们出现的顺序如何。

我已经尝试过这个,但它似乎不起作用:

 assert new HashSet( Arrays.asList(list1)).equals(new HashSet( Arrays.asList(list2)))
Run Code Online (Sandbox Code Playgroud)

有人能指出我正确的方向吗?非常感激。

inj*_*eer 6

如果你想保留Lists 而不使用Sets,你可以比较排序列表:

def list1 = ["ABC", "DEF", "GHI", "JKL"]
def list2 = ["ABC", "DEF", "JKL", "GHI"]

assert list1 != list2
assert list1.sort() == list2.sort()
Run Code Online (Sandbox Code Playgroud)

建议的基于集合的比较可能很危险,因为列表包含不同数量的重复项:

def list1 = ["ABC"]
def list2 = ["ABC", "ABC", "ABC"]

assert list1.sort() != list2.sort()
assert list1 as Set == list2 as Set // GOTCHA!
Run Code Online (Sandbox Code Playgroud)