Как сравнить String по их длине в Java 7 и Java 8?

Привычным методом Java сравнения строк будет лексикографический метод, реализованный в способе compareTo() класса String. Но иногда необходимо сравнить строки по их длине. По умолчанию нельзя использовать для этого способ compareTo(). Вместо этого необходимо написать собственный способ, который вычисляет длину строк при помощи способа length() и сравнивает их. Такой способ должен возвращать положительное значение, если первая String имеет в себя длину больше второй; отрицательное значение, если длина первой String меньше длины второй и ноль, если обе String имеют одинаковую длину.

Можно без проблем определить такой одноразовый способ, используя анонимный внутренний класс, и далее использовать его для сортировки списка строк по длине. Это способ отлично работает в Java 6 и 7, но в Java 8 он работает ещё лучше из-за меньшего числа помех благодаря новой возможности, называемой лямбда-выражения.

Вот как можно сделать это в более ранних версиях Java:

public int compare(String s1, String s2) { return s1.length() - s2.length(); }

Сравнение длины строк arraylist в Java 8 можно без проблем сделать ещё проще, используя лямбда-выражение и новые способы по умолчанию, добавленные в класс java.util.Comparator:

Comparator<String> strlenComp =(a, b) -> Integer.compare(a.length(), b.length());

a и b — это два объекта String. Integer.compare() — это новый способ, добавленный в Java 8. Так как мы используем компаратор для строк, компилятор в состоянии отображать типы a и b, которые являются String.

Как отсортировать список строк по их длине в Java 7 и 8

Ниже приведен пример использования этого компаратора длины строк для сортировки списка строк по их длине. В этом примере мы продемонстрировали программы на JDK 6 и 7 с использованием анонимного класса, и новый метод с использованием лямбда-выражений, который доступен в Java 8. Он занимает всего одну строку и его гораздо проще понять, если вы знакомы с синтаксисом лямбда-выражений.

Как отсортировать список строк по их длине в Java 7 и 8

Java 6, 7

Import java.util.ArrayList;Import java.util.Arrays;Import java.util.Collections;Import java.util.Comparator;Import java.util.List;/ * * Программа Java для сортировки списка строк по их длине * /public class StringComparisonByLength{ Public static void main(String [] args) {List<String> books = new ArrayList<>(Arrays.asList("Effective Java", "Algorithms", "Refactoring"));System.out.println("Sorting List of String by length in JDK 7 ======");System.out.println("The original list without sorting");System.out.println(books); Comparator<String> byLength = new Comparator<String>(){ @Override Public int compare(String s1, String s2) { Return s1.length() - s2.length(); } }; Collections.sort(books, byLength);   System.out.println("The same list after sorting string by length");    System.out.println(books);  }}

Результат

Sorting List of String by length in JDK 7 ======The original list without sorting [Effective Java, Algorithms, Refactoring]The same list after sorting string by length[Algorithms, Refactoring, Effective Java]

Java 8

Import java.util.ArrayList;Import java.util.Arrays;Import java.util.Comparator;Import java.util.List;/ * * Программа Java для сортировки списка строк по их длине в JDK 8 * /public class SortingListOfStringByLength{  public static void main(String[] args) {    // В Java 8 System.out.println("Sorting List of String by length in Java 8 ======");   List<String> cities = new ArrayList<>(Arrays.asList("London", "Tokyo", "NewYork"));    System.out.println("The original list without sorting");    System.out.println(cities);    cities.sort((first, second) -> Integer.compare(first.length(), second.length()));    System.out.println("The same list after sorting string by length");    System.out.println(cities);  }}

Результат

Sorting List of String by length in Java 8 ====== The original list without sorting [London, Tokyo, NewYork] The same list after sorting string by length [Tokyo, London, NewYork]

Это все, что касается сравнения длины строк Java и сортировки списка String по длине в Java 7 и Java 8. В последней версии языка делать это гораздо удобнее, так как можно создать пользовательский компаратор только одной строкой, используя лямбда-выражение. API JDK 8 включает несколько подобных способов, которые облегчают ещё более сложные сравнения. Например, используя способ thenComparing(), можно без проблем связать пару компараторов.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *