【问题标题】:When creating a list of Attribute values in Groovy (SoapUI), does the list get sorted automatically?在 Groovy (SoapUI) 中创建属性值列表时,列表会自动排序吗?
【发布时间】:2018-08-26 12:57:03
【问题描述】:

基本上,我正在尝试的是: 1. 从 SOAP API 响应中,获取来自特定属性的所有属性值的列表。该属性可以在响应中多次存在。 2.将此列表复制到第二个列表中,然后对第二个列表进行排序 3.比较两个列表,看看第一个和第二个列表是否相同

但是,我遇到了一个问题。从 SOAP API 响应中读取属性值,然后在第二个列表中使用 Collections.sort 时,它似乎也在对第一个列表进行排序。

例子:

<Home>
<ele attr="12"/>
<ele attr="11"/>
<ele attr="13"/>
</Home>

我尝试了以下两件事:

方法一:

distances.add(new BigDecimal(Home.ele[i].@'attr'[0]))
log.info distances
distanceSorted = distances
Collections.sort(distanceSorted)
log.info distances

这给了我 11,12,13 的输出

方法二:

distances.add(new BigDecimal(Home.ele[i].@'attr'[0]))
log.info distances
distanceSorted = distances
log.info distances

这给了我 12,11,13 的输出

任何想法为什么在 distanceSorted 列表上使用 Collections.sort() 也会影响距离列表?另外,我该如何解决这个问题?

【问题讨论】:

  • 更新:在将 distanceSorted = distances 更改为 distanceSorted.addAll(distances) 时,我可以获得所需的行为。但是,我仍然想知道为什么当我使用 = 运算符时会发生这种情况。 distanceSorted 是否只是距离的别名?
  • 你看到下面的答案了吗?

标签: java list groovy collections soapui


【解决方案1】:

当你这样做时:

distanceSorted = distances

您只需让两个变量引用同一个列表。所以当你这样做时

Collections.sort(distanceSorted)

它对列表进行排序,因此两个变量现在都引用排序后的列表

将这两行替换为

distanceSorted = distances.sort(false)

false 告诉 sort 方法返回一个新列表,而不是原地排序

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-11
    • 2016-01-13
    • 1970-01-01
    • 1970-01-01
    • 2014-10-17
    相关资源
    最近更新 更多