如何在OQL中对字符串进行排序

时间:2016-12-02 18:28:49

标签: java visualvm 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文档中的示例仅适用于数字: Analyzing a Heap Dump Using Object Query Language (OQL)

该课程的结构如下:

package my.org;
public class BusinessClass {
    private String displayName;
    // rest of class omitted for brevity 
}

1 个答案:

答案 0 :(得分:1)

您可以使用以下查询对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()')