[英]How to sort strings in OQL
我努力了:
select sort(obj.displayName, 'lhs < rhs') from my.org.BusinessClass obj
和
select sort(obj.displayName, 'lhs.toString() < rhs.toString()') from my.org.BusinessClass obj
两者都给我字符数组结果,但是它们都没有按String排序。 我认为它是按对象ID排序的。
我也尝试过:
select sort(obj.displayName, lhs < rhs) from my.org.BusinessClass obj
select sort(obj.displayName, lhs.toString() < rhs.toString()) from my.org.BusinessClass obj
但是这些会导致错误,因为第二个参数必须放在字符串表达式中。
VisualVM文档上的示例仅用于数字: 使用对象查询语言(OQL)分析堆转储
该类的结构如下:
package my.org;
public class BusinessClass {
private String displayName;
// rest of class omitted for brevity
}
您可以使用以下查询对OQL中的字符串进行排序:
select sort(heap.objects('java.lang.String'), 'lhs.toString().localeCompare(rhs.toString())')
在您的情况下,请使用以下OQL查询按displayName对业务对象进行排序:
select sort(heap.objects('my.org.BusinessClass'), 'lhs.displayName.toString().localeCompare(rhs.displayName.toString())')
如果要在输出中查看业务对象和实际的displayName,请使用以下OQL查询:
select map(sort(heap.objects('my.org.BusinessClass'), 'lhs.displayName.toString().localeCompare(rhs.displayName.toString())'), 'toHtml(it)+" "+it.displayName.toString()')
这是我使用的解决方法:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.