簡體   English   中英

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

兩者都給我字符數組結果,但是它們都沒有按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()')

這是我使用的解決方法:

  1. 增加OQL返回的最大行數
    1. (請參閱: 增加OQL結果的最大大小
  2. 復制未排序查詢的結果並將其粘貼到文本文件中
  3. 使用vim或類似的文本處理器刪除對象ID
  4. 使用unix進行排序

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM