Core-2: Java 8 -> 11 -> 17 Flashcards
Какие нововведения появились в java 8? (10)
- Методы интерфейсов по умолчанию;
- Функциональные интерфейсы;
- Optional
- Лямбда-выражения;
- Ссылки на методы и конструкторы;
- Stream API для работы с коллекциями;
- Новое API для работы с датами и временем;
- Добавлено несколько новых классов для потокобезопасной работы;
- Добавлен стандартный класс для работы с Base64;
- Удален PermGen, изменен способ хранения мета-данных классов;
Какие новые классы для работы с датами появились в java 8? (9)
пакет java.time:
- LocalDate – дата без времени и временных зон;
- LocalTime – время без даты и временных зон;
- LocalDateTime – дата и время без временных зон;
- ZonedDateTime – дата и время с временной зоной;
- DateTimeFormatter – форматирует даты в строки и наоборот, только для классов java.time;
- Instant – колличество секунд с Unix epoch time (полночь 1 января 1970 UTC);
- Duration – продолжительность в секундах и наносекундах;
- Period – период времени в годах, месяцах и днях;
- TemporalAdjuster – корректировщик дат (к примеру, может получить дату следующего понедельника);
Какой класс появился в Java 8 для кодирования/декодирования данных?
Base64 - потокобезопасный класс, который реализует кодировщик и декодировщик данных.
Base64 содержит 6 основных методов:
**getEncoder()/getDecoder() ** - возвращает кодировщик/декодировщик base64, соответствующий стандарту RFC 4648;
getUrlEncoder()/getUrlDecoder() - возвращает URL-safe кодировщик/декодировщик base64, соответствующий стандарту RFC 4648; getMimeEncoder()/getMimeDecoder() - возвращает MIME кодировщик/декодировщик, соответствующий стандарту RFC 2045.
Как создать Base64 кодировщик и декодировщик?
// Encode
String b64 = Base64.getEncoder().encodeToString(“input”.getBytes(“utf-8”)); //aW5wdXQ==
// Decode
new String(Base64.getDecoder().decode(“aW5wdXQ==”), “utf-8”); //input
Какие дополнительные методы для работы с ассоциативными массивами
(maps) появились в Java 8? (7)
- ** forEach()** принимает функцию, которая производит операцию над каждым элементом:
map.forEach((k, v) -> System.out.println(v));
-
putIfAbsent() добавляет пару «ключ-значение», только если ключ отсутствовал:
map.putIfAbsent("a", "Aa");
-
getOrDefault() – в случае отсутствия ключа возвращает переданное значение по умолчанию:
map.getOrDefault("a", "not found");
-
compute() создает или обновляет текущее значение на полученное в результате вычисления (возможно использовать ключ и текущее значение):
map.compute("a", (k, v) -> String.valueOf(k).concat(v)); //["a", "aAa"]
-
computeIfPresent() – если ключ существует, обновляет текущее значение на полученное в результате вычисления (возможно использовать ключ и текущее значение):
map.computeIfPresent("a", (k, v) -> k.concat(v));
-
computeIfAbsent() – если ключ отсутствует, создает его со значением, которое вычисляется (возможно использовать ключ):
map.computeIfAbsent("a", k -> "A".concat(k)); //["a","Aa"]
-
merge() принимает ключ, значение и функцию, которая объединяет передаваемое и текущее значения, если под заданным ключом значение отсутствует, то записывает туда передаваемое значение.
map.merge("a", "z", (value, newValue) -> value.concat(newValue)); //["a","Aaz"]
Что такое LocalDateTime?
LocalDateTime объединяет вместе LocaleDate и LocalTime, содержит дату и время в календарной системе ISO-8601 без привязки к часовому поясу. Время хранится с точностью до наносекунды.
Содержит множество удобных методов, таких как plusMinutes, plusHours, isAfter, toSecondOfDay и т.д.
Что такое ZonedDateTime?
java.time.ZonedDateTime – улучшение java.util.Calendar, объект класса содержит LocalDateTime + ZoneId :
~~~
ZonedDateTime zdt = ZonedDateTime.of(LocalDateTime.now(), ZoneId.of(“America/New_York”));
~~~
Как получить текущую дату с использованием Date Time API из Java 8?
LocalDate.now();
Как добавить 1 неделю, 1 месяц, 1 год, 10 лет к текущей дате с
использованием Date Time API?
LocalDate.now().plusWeeks(1);
LocalDate.now().plusMonths(1);
LocalDate.now().plusYears(1);
LocalDate.now().plus(1, ChronoUnit.DECADES);
Как получить следующий вторник, используя Date Time API?
LocalDate.now()
.with(TemporalAdjusters.next(DayOfWeek.TUESDAY));
Как получить вторую субботу текущего месяца, используя Date Time API?
LocalDate
.of(LocalDate.now().getYear(), LocalDate.now().getMonth(), 1)
.with(TemporalAdjusters.nextOrSame(DayOfWeek.SATURDAY))
.with(TemporalAdjusters.next(DayOfWeek.SATURDAY));
Как получить текущее время с точностью до миллисекунд, используя Date
Time API?
new Date().toInstant();
Как получить текущее время по местному времени с точностью до
миллисекунд, используя Date Time API?
LocalDateTime.ofInstant(new Date().toInstant(), ZoneId.systemDefault());
Главные Инновации Java 9-11 (8)
1) Добавился коллектор ZGC, позволяющий работать с огромным heap (terrabytes…
2) var keyword
3) новый HTTP Client: HttpClient, HttpRequest, HttpResponse, WebSocket.
4)toArray()
в Collections. / List / Set / Map - of() / copyOf
5) String : isBlank (), lines(), repeat (int), strip() / stripLeading / stripTrailing(),
6) Streams: takeWhile, dropWhile, iterate, flatMapping, filtering.
7) Optional: ifPresentOrElse, isEmpty()
8) Интерфейсы: private methods
Главные Инновации Java 12-17 (6)
1) Sealed Classes: новое средство для задания правил наследования: позволяет явно указывать классы, которые могут расширять или имплементировать данный:
public abstract sealed class Animal permits Cat, Dog {}
Преимущества: безопасность + информативность
2) Record: уменьшает бойлерплей при создании классов, в которых просто хранится информация:
record Point(int x, int y) { }; Point p = new Point(1, 2);
3) Pattern Matching in instanceof:
if (animal instanceof Cat cat) { System.out.println(cat.meow()); }
: здесь создается переменная, что означает, что объект проверен на тип, закастован и доступен для использования в своём scope.
4) Switch Expressions:
- - введен оператор ->
, что избавляет от return & break
- - блок кода после ->
+ yield keyword: -> { //some code; yield x;}
- - можно группировать константы в одном case
- - можно декларировать переменную как в instanceof
5) text blocks:
~~~
String block = “””
Multi-line text
with indentation
and “double quotes”!
“””;
~~~
6) улучшено описание NPE