你可以这样做:
objects.sort { a, b ->
!a.str ? !b.str ? 0 : 1 : !b.str ? -1 : a.str <=> b.str
}
展开说明:
objects.sort { a, b ->
if( !a.str ) { // If a.str is null or empty
if( !b.str ) { // If b.str is null or empty
return 0 // They are the same
}
else { // a.str is empty or null, but b.str has value
return 1 // b.str should come before a.str
}
else { // a.str has value
if( !b.str ) { // b.str is null or empty
return -1 // b.str should come after a.str
}
else { // Both have value,
return a.str <=> b.str // Compare them
}
}
这会将空字符串和空字符串放在列表的末尾,并按字母顺序对其余部分进行排序
如果您想要列表头部的空字符串(以及尾部的空值),则需要显式检查空值而不是依赖 Groovy Truth:
objects.sort { a, b ->
a.str == null ? b.str == null ? 0 : 1 : b.str == null ? -1 : a.str <=> b.str
}