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

Данная публикация представляет собой перевод статьи «How to compare String by their length in Java 7 and 8» , подготовленной дружной командой проекта Интернет-технологии.ру