it-swarm.com.ru

Сортировка ArrayList с помощью Lambda в Java 8

Может кто-нибудь показать мне быстрый пример того, как сортировать ArrayList в алфавитном порядке в Java 8, используя новый лямбда-синтаксис.

31
Jeef

Для строк это будет работать

arrayList.sort((p1, p2) -> p1.compareTo(p2));
49
poosliver

Вы просто сортируете Strings? Если это так, вам не нужны лямбды; нет никакого смысла. Вы просто делаете

import static Java.util.Comparator.*;

list.sort(naturalOrder());

... хотя, если вы сортируете объекты с полем String, это имеет смысл:

list.sort(comparing(Foo::getString));
26
Louis Wasserman

Используйте list.sort(String::compareToIgnoreCase)

Использование list.sort(String::compareTo) или list.sort(Comparator.naturalOrder()) даст неверные (то есть не алфавитные) результаты. Он будет сортировать любую заглавную букву перед все строчные буквы, поэтому массив ["aAAA","Zzz", "zzz"] будет отсортирован по ["Zzz", "aAAA", "zzz"]

4
UTF_or_Death

Предположим, у вас есть список имен (строка), которые вы хотите отсортировать по алфавиту.

List<String> result = names.stream().sorted(
                 Comparator.comparing(n->n.toString())).collect(Collectors.toList());

это работает отлично.

3
Sai prateek

Действительно общим решением было бы ввести некоторые StreamUtil как

public class StreamUtil {

    private StreamUtil() {
    }       

    @SuppressWarnings({ "rawtypes", "unchecked" })
    public static <TYPE> Comparator<TYPE> sort(Function<TYPE, ? extends Comparable> getterFunction, boolean descending) {
        if (descending) {
            return (o1, o2) -> getterFunction.apply(o2).compareTo(getterFunction.apply(o1));
        }
        return (o1, o2) -> getterFunction.apply(o1).compareTo(getterFunction.apply(o2));
    }

}

Звонок будет выглядеть примерно так

list.stream().sorted(sort(YourClass::getSortProperty, true));
1
Chris311

Самый лаконичный:

Collections.sort(stringList, String::compareToIgnoreCase);
0
Faraz Durrani

В функциональном программировании вы не используете старые объекты для работы с ними, а создаете новые таким образом:

list.stream().sorted().map(blah-blah).filter(...)...
0
Dmitry Ginzburg