2016-12-02 3 views
0

Я попытался:Как отсортировать строки в 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 
} 

ответ

0

Это обходной путь я использовал:

  1. Увеличение макс количество строк, возвращаемых OQL
    1. (см. Increasing the Max Size of OQL Result)
  2. Скопируйте и вставьте результат неотсортированной запроса в текстовый файл
  3. Использование VIM или аналогичный текстовый процессор, чтобы удалить идентификатор объекта
  4. рода с помощью UNIX сортировать
1

Вы можете использовать следующий запрос для сортировки строк в 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())') 

, если вы хотите видеть свой бизнес-объект и фактическое DISPLAYNAME в использовании выходного этот OQL запрос:

select map(sort(heap.objects('my.org.BusinessClass'), 'lhs.displayName.toString().localeCompare(rhs.displayName.toString())'), 'toHtml(it)+" "+it.displayName.toString()') 
+0

Я попробовал 'выбрать сорт (obj.displayName,«LHS .toString(). localeCompare (rhs.toString()) ') из my.org.BusinessClass obj', но по-прежнему кажется, что сортировка по идентификатору объекта вместо содержимого строки. Видно ли это, что heap.objects ('java.lang.String')? – joseph

+0

Да, вы должны использовать heap.objects(). Я обновил свой ответ выше, чтобы точно соответствовать вашему делу. –

Смежные вопросы