3

私が試してみました:

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

ただし、sort の 2 番目の引数が文字列式を想定しているため、これらはエラーになります。

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 
}
4

2 に答える 2

4

次のクエリを使用して、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()')
于 2016-12-04T11:04:39.577 に答える