Столкнувшись с трудностями при настройке правил сортировки с использованием RuleBasedCollator в Java

Вы не можете, литерал шаблона был оценен и преобразован в строку, когда инициализатор объекта, который был внутри, был оценен. obj.title - результат вычисления литерала шаблона (строка 1), а не какого-либо объекта шаблона. Литералы шаблонов - это именно то, что: литеральная нотация , которая оценивается, когда она встречается (точно так же, как строковый литерал оценивается, в результате получается строка, когда встречается литерал строки) .

Вместо этого вы можете сделать title функцию, которую вы передаете name в:

let obj1 = { name: 'abc' }, 
obj2 = { title : name => `${name}` } 

Вы должны называть ее, конечно, когда захотите заголовок.


¹ Строка в этом случае , поскольку шаблонный литерал был автономным, не привязан к функции тега.

0
задан Helping Hands 19 January 2019 в 04:45
поделиться

1 ответ

Это связано с порядком набора символов ASCII, где «Z» идет первым, чем «a»


RuleBasedCollator проверяет только первую букву строки для сортировки. Как правило, вы установили (A < a). В нем перечислены все строки, начинающиеся с заглавных букв, а затем идут строчные.

Поскольку ваш список содержит строку, начинающуюся со специальных символов, я предлагаю создать два списка для сортировки. Один для строки, начинающейся со специальных символов, а затем другой список, содержащий все другие значения. Сортируйте эти два списка по отдельности, а затем объединяйте отсортированные списки. Я попробовал приведенный ниже код, и он отлично работает

// Input list
List<String> name = new ArrayList<String>();


    final String[] specialChars = { "_", ">" }; 
    List<String> specCharList = new ArrayList<String>();
    List<String> strList = new ArrayList<String>();
    List<String> finalList = new ArrayList<String>();
    String rules = "< '_' < '>' ";

    boolean isSpec = false ;
    for(String names : name) {
        isSpec = false ;
        for(int i=0;i<specialChars.length;i++) {
            if(names.startsWith(specialChars[i])) {
                // System.out.println("Name : "+names);
                isSpec = true ;
            }
        }  
      // to sort special char list and normal list
       if(isSpec) {
           specCharList.add(names);
       } else {
           strList.add(names);
       }
    }


    try {
        // To sort special character list
        Collections.sort(specCharList, new RuleBasedCollator(rules));
        // Add the sorted list to finallist
        finalList.addAll(specCharList);

        // to sort other list
        Collections.sort(strList, String.CASE_INSENSITIVE_ORDER);
        // Add the sorted list to finallist
        finalList.addAll(strList);

    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    System.out.println("Final Output List --------");
    for(String names : finalList) {
        System.out.println(names);
    }
0
ответ дан SKYLINE 19 January 2019 в 04:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: