Java 8

Сергей Посьмашный
29 мая 2020

Сегодня поговорим немного о некоторых нововведениях в Java 8. Почему именно о них? В данный момент большинство компаний при создании приложений используют именно эту версию.

Начнем с интерфейсов:

  • можно создавать default методы - методы с реализацией по умолчанию. Это сделано для того, чтобы при расширении интерфейса все, кто его использовали, не упали с ошибками при компиляции.
  • функциональные интерфейсы - это интерфейс с всего одним единственным абстрактным методом. Такой интерфейс предоставляет тип соответствующий определенному лямбда-выражению.

Лямбда-выражения - реализация метода, определенного в функциональном интерфейсе. Стандартный вид лямбды: список параметров ->; тело, где выполняются действия.

  Пример: 

            List<String> names = Arrays.asList(“Ann”, “Den”, “Ben”, “Alice”);

            Анонимный компаратор
            Collections.sort(names, new Comparator<String>(){
                      @Override
                      public int compare(String a, String b) {
                               return b.compareTo(a);
                      }
            });

            Теперь можно заменить на лямбда-выражение
            Collections.sort(names, (String a, String b)) -> {
                      return b.compareTo(a);
            });

Также теперь можно ссылаться на методы и конструкторы при помощи оператора ::

Пример:

         AppleFactory<Apple> appleFactory = Apple::new; //ссылка на конструктор
         Expression expression = ExpretionUtils::isEven; //ссылка на метод

Помимо всего была добавлена такая функциональность как потоки - Streams.

Мы можем создать stream (из коллекции), применить промежуточные операции и применить терминальную операцию. Потоки ленивы, то есть они не будут ничего выполнять, пока не вызовется терминальная операция.

Пример:

         List<Integer> listOfNumbers = Arrays.asList(1,2,3,4,5);
         //взаимодействие stream api и лямбда-выражений
         int quantity = listOfNumbers.stream().reduce((x,y) -> x+y).get(); //15

В Java 8 много новинок помимо этих и, прочитав данную статью, можно с легкостью погрузится в пучину новинок Java 8. По собственному опыту скажу, что иначе, как с практикой, не придет полное понимание лямбда-выражений и Stream API.

Весь цикл читайте на страничке Сергея Посьмашного