如何在 OQL 中对字符串进行排序
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
两者都给我字符数组结果,但其中 none 按字符串排序。我认为它是按对象 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) 分析堆转储
class的结构如下:
package my.org;
public class BusinessClass {
private String displayName;
// rest of class omitted for brevity
}
这是我使用的解决方法:
- 增加OQL返回的最大行数
- (参见:Increasing the Max Size of OQL Result)
- 将未排序查询的结果复制并粘贴到文本文件
- 使用vim或类似的文本处理器删除对象id
- 使用 unix 排序
您可以使用以下查询对 OQL 中的字符串进行排序:
select sort(heap.objects('java.lang.String'), 'lhs.toString().localeCompare(rhs.toString())')
在您的情况下,使用此 OQL 查询按显示名称对您的业务对象进行排序:
select sort(heap.objects('my.org.BusinessClass'), 'lhs.displayName.toString().localeCompare(rhs.displayName.toString())')
如果您想在输出中查看您的业务对象和实际显示名称,请使用此 OQL 查询:
select map(sort(heap.objects('my.org.BusinessClass'), 'lhs.displayName.toString().localeCompare(rhs.displayName.toString())'), 'toHtml(it)+" "+it.displayName.toString()')
我试过:
select sort(obj.displayName, 'lhs < rhs') from my.org.BusinessClass obj
和
select sort(obj.displayName, 'lhs.toString() < rhs.toString()') from my.org.BusinessClass obj
两者都给我字符数组结果,但其中 none 按字符串排序。我认为它是按对象 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) 分析堆转储
class的结构如下:
package my.org;
public class BusinessClass {
private String displayName;
// rest of class omitted for brevity
}
这是我使用的解决方法:
- 增加OQL返回的最大行数
- (参见:Increasing the Max Size of OQL Result)
- 将未排序查询的结果复制并粘贴到文本文件
- 使用vim或类似的文本处理器删除对象id
- 使用 unix 排序
您可以使用以下查询对 OQL 中的字符串进行排序:
select sort(heap.objects('java.lang.String'), 'lhs.toString().localeCompare(rhs.toString())')
在您的情况下,使用此 OQL 查询按显示名称对您的业务对象进行排序:
select sort(heap.objects('my.org.BusinessClass'), 'lhs.displayName.toString().localeCompare(rhs.displayName.toString())')
如果您想在输出中查看您的业务对象和实际显示名称,请使用此 OQL 查询:
select map(sort(heap.objects('my.org.BusinessClass'), 'lhs.displayName.toString().localeCompare(rhs.displayName.toString())'), 'toHtml(it)+" "+it.displayName.toString()')