Как сравнить 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(), можно связать несколько компараторов.