Groovy 将max与GPathResults列表一起使用

Groovy 将max与GPathResults列表一起使用,groovy,xml-parsing,Groovy,Xml Parsing,我有一个GPathResults列表,其中所有人都有一个属性“seq” 例如: 现在我想选择具有最大“seq”的GPathResult 如果我有10个GPathResult,其中10个值为'seq',我需要获取具有最大'seq'值的GPathResult 有没有比将每个GPathResult与下一个GPathResult进行比较更常规的方法呢?您尝试过吗 results*.seq*.toInteger().max() 这将为您提供seq的最大值,这不是您所要求的。伊恩有上面的解决方案 或者我

我有一个GPathResults列表,其中所有人都有一个属性“seq” 例如:

现在我想选择具有最大“seq”的GPathResult

如果我有10个GPathResult,其中10个值为'seq',我需要获取具有最大'seq'值的GPathResult

有没有比将每个GPathResult与下一个GPathResult进行比较更常规的方法呢?

您尝试过吗

results*.seq*.toInteger().max()

这将为您提供seq的最大值,这不是您所要求的。伊恩有上面的解决方案

或者我想你也可以

results.sort( false ) { -it.seq.toInteger() }.head()
你可以使用

从文件中:

如果闭包有两个参数,它就像传统的比较器一样使用。[…]否则,假定闭包采用单个参数并返回一个可比较的(通常为整数),然后用于进一步比较

如果某些GPathResults可能没有一个
seq
,那么您可能需要类似的内容(未测试)


MIN\u VALUE
使没有
seq的项目比有
seq的项目小)。

numberFormatException表示属性存在,但为空

您的解决方案正在运行,但此解决方案可能更安全

list.max{(it?@seq?:Integer.MIN_VALUE).toInteger()}

完整示例

def p = new XmlParser().parseText("<root><node seq='1'/><node/><node seq='3'/><node seq=''/></root>")
def a = (0..3).collect{ p.node[it]}
a.each {println(it.@seq)} // some debug output
a.max {(it?.@seq ?: Integer.MIN_VALUE).toInteger()} // actual searching. Elvis operator to set default values if it.seq is not exist or empty. Will be a little more safer solution.
defp=newXMLParser().parseText(“”)
defa=(0..3).collect{p.node[it]}
a、 每个{println(it@seq)}//都有一些调试输出
a、 max{(it?@seq?:Integer.MIN_值).toInteger()}//实际搜索。Elvis运算符设置默认值,前提是它的.seq不存在或为空。这将是一个更安全的解决方案。

这将从所有项目的值中为您提供最高的
seq
值,而不是该最高值所属的项目。啊……真的。。。胡说八道。这适用于所有情况,除非集合中的GPathResult中没有“seq”元素。在这种情况下,我会得到一个“numberFormatException”。任何克服此问题的方法。@user1717230如果在向GPathResult请求不存在的键时返回的值为Groovy false,则可以使用三元条件。感谢更新…仍然可以看到相同的“numberFormatException”,尽管这样做有效:def gpathWithMaxSeq=ListofGpath.max{it.seq.isEmpty()?Integer.MIN_VALUE:it.seq.toInteger()}谢谢…仅提供我的信息,您是否看到我的解决方案有任何问题(在修改Ian的解决方案之后)?…有任何不安全的情况吗?@user1717230如果您关于
def gpathWithMaxSeq=listOfGpaths.max{it.seq.isEmpty()?Integer.MIN_VALUE:it.seq.toInteger()
是。如果it.seq==null,则在调用“isEmpty()”方法时将得到NPE。我还添加了一个安全的导航运算符..def gpathWithMaxSeq=ListofGpath.max{it.seq?.isEmpty()?Integer.MIN_值:it.seq?.toInteger()}
def gpathWithMaxSeq = listOfGpaths.max { it.seq.toInteger() }
def gpathWithMaxSeq = listOfGpaths.max {
  it.seq ? it.seq.toInteger() : Integer.MIN_VALUE
}
def p = new XmlParser().parseText("<root><node seq='1'/><node/><node seq='3'/><node seq=''/></root>")
def a = (0..3).collect{ p.node[it]}
a.each {println(it.@seq)} // some debug output
a.max {(it?.@seq ?: Integer.MIN_VALUE).toInteger()} // actual searching. Elvis operator to set default values if it.seq is not exist or empty. Will be a little more safer solution.