Сортировка с помощью компаратора - PullRequest
0 голосов
/ 18 июня 2020

Мне нужно отсортировать ниже список объектов класса Details с Java 8 Comparator


    class Details{
      String name;
      String age;

    }

в порядке имен классов Details, как показано ниже предпочтение

1-й - начинается с букв

2-й - начинается с цифр c

и 3-й - начинается со специального символа

Ожидаемый результат s / b: отсортированный Список Детали = отсортированы по имени детали, независимо от других параметров в классе

    "Came"

    "result"

    "Result came"

    "01 Result"

    "02 Result"

    "05 Result"

    "# Came"

    "# Result"
    Collections.sort(List.o(details1,details2,details3),(d1,d2)->{

    // got stuck here what to include to achieve the sort as per my requirement

    return d1.getName().compareTo(d2.getName());
    });

Ответы [ 2 ]

2 голосов
/ 18 июня 2020

Вот Java 11 (только что использованная var, вот и все) код для вас:

    var a = List.of(details1, details2, details3)
                .stream()
                .sorted(Comparator.comparingInt((Details d) -> priority(d.getName())).thenComparing(Details::getName))
                .collect(Collectors.toList());

Если метод приоритета сложно понять, вы можете сослаться на код @ Eklavya


    private static int priority(String str){
        return Character.isAlphabetic(str.charAt(0))?1:Character.isDigit(str.charAt(0))?2:3;
      }

2 голосов
/ 18 июня 2020

Вы можете определить собственный приоритет следующим образом:

private static int priority(String str){
    if (Character.isAlphabetic(string.charAt(0)))return 1;
    if (Character.isDigit(string.charAt(0)))     return 2;
    return 3;
}

Затем вы можете использовать в функции сравнения

Collections.sort(list, new Comparator<Project>() {
    @Override
    public int compare(Details o1, Details o2) {
        int result = Integer.compare(priority(o1.name), priority(o2.name));
        if (result != 0) return result;
        return o1.name.compareTo(o2.name);
    }
});

Использование java 8 синтаксиса

Collections.sort(list,Comparator.comparingInt(d -> priority(d.getName()))
                                .thenComparing(d-> d.getName()));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...