Как отсортировать int [] с помощью многострочного лямбда-выражения в Java - PullRequest
0 голосов
/ 07 апреля 2020

На этот вопрос есть ответ о том, как отсортировать список с помощью многострочного лямбда-выражения:

list.sort((o1, o2) -> {
    int cmp = o1.getGroup().compareTo(o2.getGroup());
    if (cmp == 0)
        cmp = Integer.compare(o1.getAge(), o2.getAge());
    if (cmp == 0)
        cmp = o1.getName().compareTo(o2.getName());
    return cmp;

});

К сожалению, похоже, что это не работает для необработанного массива int[] arr:

Arrays.sort(arr, (int1, int2) -> {
    // some lambda, various if-else statements for example
});

Как использовать многострочное лямбда-выражение в Arrays.sort () для сортировки необработанного массива?

Я в порядке с любым другим подходом (не должен использовать Arrays.), если он использует лямбда-выражения (без компараторов).

1 Ответ

1 голос
/ 07 апреля 2020

Если вы намерены сделать это, используя только lambdas, тогда это будет работать как с lists, так и с arrays. Это предполагает, что ваши поля group и age являются целыми.

        Comparator<Item> comp = (o1, o2) -> {
            int cmp = Integer.compare(o1.getGroup(), o2.getGroup());
            cmp = cmp == 0 ? Integer.compare(o1.getAge(), o2.getAge()) : cmp;
            cmp = cmp == 0 ? o1.getName().compareTo(o2.getName()) : cmp;
            return cmp;
        };

        list.sort(comp);

        Arrays.sort(items, comp);

Но я бы использовал List и сделал бы это следующим образом:

    list.sort(Comparator.comparing(Item::getGroup)
                .thenComparing(Item::getAge)
                .thenComparing(Item::getName));

И даже ваше lambda выражение является comparator. Вы не можете сравнить без какого-либо Comparator независимо от того, как вы его построили.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...