如何在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

两个都给我字符数组结果,但是没有一个用字符串对其进行排序。我认为它是按对象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())')

在您的情况下

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()')

这是我使用的解决方法:

  1. 增加OQL返回的最大行数
    1. (请参阅:增加OQL结果的最大大小)
  2. 复制并粘贴了未分类查询的结果
  3. 使用VIM或类似的文本处理器删除对象ID
  4. 使用Unix排序
  5. 进行排序

相关内容

  • 没有找到相关文章

最新更新