Java 8 Flashcards
Что нового в Java 8
Лямбдавыражения, default в выражениях, ссылки на методы, функциональные интерфейсы, stream, Nashorn
Как отсортировать список строк с помощью лямбда выражения
movies.sort(new Comparator() { @Override public int compare(Movie m1, Movie m2) { if(m1.getStarred() == m2.getStarred()){ return 0; } return m1.getStarred() ? -1 : 1; } });
Что такое лямбда выражение
Лямбда-выражение представляет собой блок кода, который можно передать в другое место, поэтому он может быть выполнен позже, один или несколько раз.
(аргументы)->{тело метода}
(String firstStr, String secondStr)
-> Integer.compare(firstStr.length(),secondStr.length())
a->a+a///скобки сможно опускать
Ссылки на метод
Arrays.sort(strs, String::compareToIgnoreCase)
strs это перменная, String класс, compareToIgnoreCase это метод стринга
другие примеры:
button.setOnAction(System.out::println);
Expression expr = ExpressionHelper::isPositive;
UserBuilder userBuilder = User::new;//ссылка на constructor
функциональные интерфейсы что такое какие что делают
Вы можете поставить лямбда-выражение всякий раз, когда ожидается объект интерфейса с одним абстрактным методом. Такой интерфейс называется функциональным интерфейсом.
@FunctionalInterface public interface GaMechanic { void new_deck(); default int deal_cards(int num_of_players) { // тело метода } default int check_your_cards(int[] hand) { //... } default int battle(Card player1_Card, Card player2_Card) { //... } }
default методы и как вызвать
Разработчики языка создали методы интерфейса с конкретной реализацией (так называемые методы по умолчанию). Эти методы могут быть безопасно добавлены к существующим интерфейсам….т.е мы теперь можем реализовать методы прямо в интерфейсе
вызывать в реализуюзем классе class Student implements Person, Naming { public String getFirstName() {return Person.super.getFirstName(); }}
static методы и как вызвать
Статические методы похожи на методы по умолчанию, за исключением того, что мы не можем переопределить их в классах, реализующих интерфейс.
Статические методы в интерфейсе хороши для обеспечения вспомогательных методов, например, проверки на null, сортировки коллекций и т.д.
что такое stream
функциональный стиль работы со структурами данных. Java Stream API предлагает два вида методов: 1. Конвейерные — возвращают другой stream, то есть работают как builder,
2. Терминальные — возвращают другой объект, такой как коллекция, примитивы, объекты, Optional и т.д.
зачем метод collect в java 8
Представление результатов в виде коллекций и других структур данных .collect(Collectors.toList())
foreach в stream
Применяет функцию к каждому объекту стрима, порядок при параллельном выполнении не гарантируется
map в stream
Преобразует каждый элемент стрима
collection.stream().map((s) -> s + “_1”).collect(Collectors.toList())
distinct в stream
Возвращает стрим без дубликатов (для метода equals)
collection.stream().distinct().collect(Collectors.toList())
filter в stream
filter(«a1»::equals) отфильтровывает
параллельная обработка в java8
paralellSort, paralellStream
optional
Контейнер для значения с возможным null