Проект

Общее

Профиль

JAVA 8 » История » Версия 3

Александр Александров, 21.04.2019 00:19

1 1 Александр Александров
h1. JAVA 8
2
3
h2. Вопросы
4
5
# Какие нововведения, появились в Java 8?
6
# Как сортировать список строк с помощью лямбда-выражения?
7
# Какова структура лямбда-выражения?
8
# К каким переменным есть доступ у Лямбда-выражений?
9
# Что такое ссылки на метод?
10
# Какие виды ссылок на методы вы знаете?
11
# Объясните выражение System.out::println.
12
# Что такое функциональные интерфейсы?
13
# Для чего нужен функциональный интерфейс BiConsumer<T,U>?
14
# Для чего нужен функциональный интерфейс BiFunction<T,U,R>?
15
# Для чего нужен функциональный интерфейс BinaryOperator<T>?
16
# Для чего нужен функциональный интерфейс BiPredicate<T,U>?
17
# Для чего нужен функциональный интерфейс BooleanSupplier?
18
# Для чего нужен функциональный интерфейс Consumer<T>?
19
# Для чего нужен функциональный интерфейс DoubleBinaryOperator?
20
# Для чего нужен функциональный интерфейс DoubleConsumer?
21
# Для чего нужен функциональный интерфейс DoubleFunction<R>?
22
# Для чего нужен функциональный интерфейс DoublePredicate?
23
# Для чего нужен функциональный интерфейс DoubleSupplier?
24
# Для чего нужен функциональный интерфейс DoubleToIntFunction?
25
# Для чего нужен функциональный интерфейс DoubleToLongFunction?
26
# Для чего нужен функциональный интерфейс DoubleUnaryOperator?
27
# Для чего нужен функциональный интерфейс Function<T,R>?
28
# Для чего нужен функциональный интерфейс IntBinaryOperator?
29
# Для чего нужен функциональный интерфейс IntConsumer?
30
# Для чего нужен функциональный интерфейс IntFunction<R>?
31
# Для чего нужен функциональный интерфейс IntPredicate?
32
# Для чего нужен функциональный интерфейс IntSupplier?
33
# Для чего нужен функциональный интерфейс IntToDoubleFunction?
34
# Для чего нужен функциональный интерфейс IntToLongFunction?
35
# Для чего нужен функциональный интерфейс IntUnaryOperator?
36
# Для чего нужен функциональный интерфейс LongBinaryOperator?
37
# Для чего нужен функциональный интерфейс LongConsumer?
38
# Для чего нужен функциональный интерфейс LongFunction<R>?
39
# Для чего нужен функциональный интерфейс LongPredicate?
40
# Для чего нужен функциональный интерфейс LongSupplier?
41
# Для чего нужен функциональный интерфейс LongToDoubleFunction?
42
# Для чего нужен функциональный интерфейс LongToIntFunction?
43
# Для чего нужен функциональный интерфейс LongUnaryOperator?
44
# Для чего нужен функциональный интерфейс ObjDoubleConsumer<T>?
45
# Для чего нужен функциональный интерфейс ObjIntConsumer<T>?
46
# Для чего нужен функциональный интерфейс ObjLongConsumer<T>?
47
# Для чего нужен функциональный интерфейс Predicate<T>?
48
# Для чего нужен функциональный интерфейс Supplier<T>?
49
# Для чего нужен функциональный интерфейс ToDoubleBiFunction<T,U>?
50
# Для чего нужен функциональный интерфейс ToDoubleFunction<T>?
51
# Для чего нужен функциональный интерфейс ToIntBiFunction<T,U>?
52
# Для чего нужен функциональный интерфейс ToIntFunction<T>?
53
# Для чего нужен функциональный интерфейс ToLongBiFunction<T,U>?
54
# Для чего нужен функциональный интерфейс ToLongFunction<T>?
55
# Для чего нужен функциональный интерфейс UnaryOperator<T>?
56
# Что такое StringJoiner?
57
# Что такое default методы?
58
# Что такое static методы?
59
# Как вызывать default-метод интерфейса в классе?
60
# Как вызывать static-метод интерфейса в классе?
61
# Что такое потоки(stream) в Java 8
62
# Для чего нужен метод collect Java 8?
63
# В чем разница между коллекцией(Collection) и потоком(Stream)?
64
# Для чего предназначен метод forEach в потоках(stream)?
65
# Как вывести на экран 10 случайных чисел, используя forEach?
66
# Для чего предназначен метод map в потоках(stream)?
67
# Как можно вывести на экран уникальные квадраты чисел используя метод map?
68
# Какова цель метода filter в потоках(stream)?
69
# Как вывести на экран количество пустых строк с помощью метода filter?
70
# Для чего предназначен метод limit в потоках(stream)?
71
# Для чего предназначен метод sorted в потоках(stream)?
72
# Как вывести на экран 10 случайных чисел в отсортированном порядке в Java 8?
73
# Параллельная обработка в Java 8?
74
# Как найти максимальное число в списке Java 8?
75
# Как найти минимальное число в списке Java 8?
76
# Как получить сумму всех чисел в списке, используя Java 8?
77
# Как получить среднее значение всех чисел, в списке, используя Java 8?
78
# Что такое Optional?
79
# Что такое Nashorn?
80
# Что такое jjs в Java 8?
81
# Что такое LocalDateTime в Java 8?
82
# Что такое ZonedDateTime в Java 8?
83
# Как получить текущую дату с использованием time API из Java 8?
84
# Как добавить 1 неделю к текущей дате с использованием time API?
85
# Как добавить 1 месяц к текущей дате с использованием time API?
86
# Как добавить 1 год к текущей дате с использованием time API?
87
# Как добавить 10 лет к текущей дате с использованием time API?
88
# Как получить следующий вторник используя time API?
89
# Как получить вторую субботу текущего месяца используя time API?
90
# Как получить текущею дату в миллисекундах используя time API?
91
# Как получить текущею дату по местному времени в миллисекундах используя используя time API?
92
# Какой класс появился в Java 8 для декодирования данных?
93
# Какой класс появился в Java 8 для кодирования данных?
94
# Как создать Base64 декодировщик?
95
# Как создать Base64 кодировщик?
96
97
h2. Ответы
98
99
h3. Какие нововведения, появились в Java 8?
100
101 2 Александр Александров
В Java 8 было добавлено много функций, наиболее значимые из них упомянуты ниже:
102
103
* Полноценная поддержка лямбда-выражений, которая добавляет
104
* функциональные возможности обработки данных для Java.
105
* Ключевое слово default в интерфейсах для поддержки функциональности по умолчанию(интерфейс может иметь реализацию метода по умолчанию).
106
* Ссылки на методы.
107
* Функциональные интерфейсы (предикаты, поставщики и т. д.)
108
* Потоки (stream) для работы с коллекциями
109
* Новое API для работы с датами
110
* Nashorn движок JavaScript, разрабатываемый полностью на Java компанией Oracle
111
112 1 Александр Александров
h3. Как сортировать список строк с помощью лямбда-выражения?
113
114 2 Александр Александров
Следующий код сортирует список строк с помощью лямбда-выражения Java 8:
115
116
{{dmsf_image(209)}}
117
118 1 Александр Александров
h3. Какова структура лямбда-выражения?
119
120 2 Александр Александров
Лямбда выражение имеет следующую структуру: (method params) -> {lambda expression body}, где
121
122
* method params - список входящих параметров, разделенных запятой(в случаи если параметров больше одного заключаются в скобки).
123
* оператор "->" - служит разделителем между списком параметров нашего метода и телом, в котором происходит его реализация.
124
* lambda expression body - тело метода, состоящее из одного выражения или нескольких, заключенных в фигурные скобки.
125
126 1 Александр Александров
h3. К каким переменным есть доступ у Лямбда-выражений?
127
128 2 Александр Александров
Лямбда-выражения имеют доступ к переменным области видимости, в которой их определили. Но доступ возможен только при условии, что переменные являются effective final, то есть либо явно имеют модификатор final, либо не меняют своего значения после инициализации, если переменной присваивается значение во второй раз, лямбда-выражение вызывает ошибку компиляции.
129
130 1 Александр Александров
h3. Что такое ссылки на метод?
131
132 2 Александр Александров
Ссылки на метод - компактные лямбда-выражения которые позволяют передавать ссылки на методы или конструкторы. Для этого нужно использовать ключевое слово "::". Ссылочные методы внедряют полезный синтаксис, чтобы ссылаться на существующие методы или конструкторы Java-классов или объектов (экземпляров). Совместно с лямбда-выражениями, ссылочные методы делают языковые конструкции компактными и лаконичными, делая его шаблонным
133
134 1 Александр Александров
h3. Какие виды ссылок на методы вы знаете?
135
136 2 Александр Александров
Существует четыре вида ссылок на методы:
137
138
* Ссылка на статический метод(ContainingClass::staticMethodName)
139
* Ссылка на метод конкретного объекта(ContainingObject::instanceMethodName)
140
* Ссылка на метод произвольного объекта конкретного типа(ContainingType::methodName)
141
* Ссылка на конструктор(ClassName::new), для дженериков (generics) Class< T>::new.
142
143 1 Александр Александров
h3. Объясните выражение System.out::println.
144
145 2 Александр Александров
Выражение System.out::println является ссылкой на статический метод println объекта out класа System, который эквивалентен лямбда-выражению x -> System.out.println(x).
146
147 1 Александр Александров
h3. Что такое функциональные интерфейсы?
148
149 2 Александр Александров
Функциональный интерфейс - это тот интерфейс, который определяет строго один абстрактный метод. В Java 8 была введена новая аннотация @FunctionalInterface для обозначения интерфейса, функциональным, эта аннотация используется для того, чтобы избежать случайного добавления абстрактных методов в функциональный интерфейс. Она не обязательна, но является хорошей практикой написания кода. Функциональные интерфейсы позволяют нам использовать лямбдавыражения для создания экземпляра таких интерфейсов. Лучшим примером функционального интерфейса будет интерфейс java.lang.Runnable с одним абстрактным методом run(). Заметим, интерфейс может включать сколько угодно default методов и при этом оставаться функциональным, потому что default методы - не абстрактные.
150
151 1 Александр Александров
h3. Для чего нужен функциональный интерфейс BiConsumer<T,U>?
152
153 2 Александр Александров
Представляет собой операцию, которая принимает два входных параметра, и не возвращает никакого результата.
154
155 1 Александр Александров
h3. Для чего нужен функциональный интерфейс BiFunction<T,U,R>?
156
157 2 Александр Александров
Представляет собой функцию, которая принимает два аргумента и возвращает результат.
158
159 1 Александр Александров
h3. Для чего нужен функциональный интерфейс BinaryOperator<T>?
160
161 2 Александр Александров
Представляет собой операцию над двумя операндами одного и того же типа, выполняет над ними бинарную операцию и возвращает результат того же типа, что и операнды.
162
163 1 Александр Александров
h3. Для чего нужен функциональный интерфейс BiPredicate<T,U>?
164
165 2 Александр Александров
Представляет собой предикат (булеву функцию) двух аргументов.
166
167 1 Александр Александров
h3. Для чего нужен функциональный интерфейс BooleanSupplier?
168
169 2 Александр Александров
Представляет собой поставщика булевых результатов.
170
171 1 Александр Александров
h3. Для чего нужен функциональный интерфейс Consumer<T>?
172
173 2 Александр Александров
Представляет собой операцию, которая принимает один входной аргумент, выполняет некоторое действие над объектом типа T, при этом ничего не возвращая.
174
175 1 Александр Александров
h3. Для чего нужен функциональный интерфейс DoubleBinaryOperator?
176
177 2 Александр Александров
Представляет собой операцию над двумя операндами типа double, возвращает результат типа double.
178
179 1 Александр Александров
h3. Для чего нужен функциональный интерфейс DoubleConsumer?
180
181 2 Александр Александров
Представляет собой операцию, которая принимает один аргумент типа double, и не возвращает результат.
182
183 1 Александр Александров
h3. Для чего нужен функциональный интерфейс DoubleFunction<R>?
184
185 2 Александр Александров
Представляет собой функцию, которая принимает один аргумент типа double, и возвращает результат.
186
187 1 Александр Александров
h3. Для чего нужен функциональный интерфейс DoublePredicate?
188
189 2 Александр Александров
Представляет собой предикат (булеву функцию) одного аргумента типа double.
190
191 1 Александр Александров
h3. Для чего нужен функциональный интерфейс DoubleSupplier?
192
193 2 Александр Александров
Представляет собой поставщика double результатов.
194
195 1 Александр Александров
h3. Для чего нужен функциональный интерфейс DoubleToIntFunction?
196
197 2 Александр Александров
Представляет собой функцию, которая принимает один аргумент типа double, возвращает результат типу int.
198
199 1 Александр Александров
h3. Для чего нужен функциональный интерфейс DoubleToLongFunction?
200
201 2 Александр Александров
Представляет собой функцию, которая принимает один аргумент типа double, и возвращает результат типу long.
202
203 1 Александр Александров
h3. Для чего нужен функциональный интерфейс DoubleUnaryOperator?
204
205 2 Александр Александров
Представляет собой операцию над одним аргументом типа double, возвращает результат типу double.
206
207 1 Александр Александров
h3. Для чего нужен функциональный интерфейс Function<T,R>?
208
209 2 Александр Александров
Представляет собой функцию перехода от объекта типа T к объекту типа R.
210
211 1 Александр Александров
h3. Для чего нужен функциональный интерфейс IntBinaryOperator?
212
213 2 Александр Александров
Представляет собой операцию над двумя операндами типа int, возвращает результат типа int.
214
215 1 Александр Александров
h3. Для чего нужен функциональный интерфейс IntConsumer?
216
217 2 Александр Александров
Представляет собой операцию, которая принимает один аргумент типа int, и не возвращает результат.
218
219 1 Александр Александров
h3. Для чего нужен функциональный интерфейс IntFunction<R>?
220
221 2 Александр Александров
Представляет собой операцию, которая принимает один аргумент типа int, возвращает результат.
222
223 1 Александр Александров
h3. Для чего нужен функциональный интерфейс IntPredicate?
224
225 2 Александр Александров
Представляет собой предикат (булеву функцию) одного аргумента типа int.
226
227 1 Александр Александров
h3. Для чего нужен функциональный интерфейс IntSupplier?
228
229 2 Александр Александров
Представляет собой поставщика int результатов.
230
231 1 Александр Александров
h3. Для чего нужен функциональный интерфейс IntToDoubleFunction?
232
233 2 Александр Александров
Представляет собой функцию, которая принимает один аргумент типа int, возвращает результат типу double.
234
235 1 Александр Александров
h3. Для чего нужен функциональный интерфейс IntToLongFunction?
236
237 2 Александр Александров
Представляет собой функцию, которая принимает один аргумент типа int, возвращает результат типу long.
238
239 1 Александр Александров
h3. Для чего нужен функциональный интерфейс IntUnaryOperator?
240
241 2 Александр Александров
Представляет собой операцию над одним аргументом типа int, возвращает результат типу int.
242
243 1 Александр Александров
h3. Для чего нужен функциональный интерфейс LongBinaryOperator?
244
245 2 Александр Александров
Представляет собой операцию над двумя операндами типа long, возвращает результат типа long.
246
247 1 Александр Александров
h3. Для чего нужен функциональный интерфейс LongConsumer?
248
249 2 Александр Александров
Представляет собой операцию, которая принимает один аргумент типа long, не возвращает результат.
250
251 1 Александр Александров
h3. Для чего нужен функциональный интерфейс LongFunction<R>?
252
253 2 Александр Александров
Представляет собой функцию, которая принимает один аргумент типа long, и возвращает результат.
254
255 1 Александр Александров
h3. Для чего нужен функциональный интерфейс LongPredicate?
256
257 2 Александр Александров
Представляет собой предикат (булеву функцию) одного аргумента типа long.
258
259 1 Александр Александров
h3. Для чего нужен функциональный интерфейс LongSupplier?
260
261 2 Александр Александров
Представляет собой поставщика long результатов.
262
263 1 Александр Александров
h3. Для чего нужен функциональный интерфейс LongToDoubleFunction?
264
265 2 Александр Александров
Представляет собой функцию, которая принимает один аргумент типа long, и возвращает результат типу double.
266
267 1 Александр Александров
h3. Для чего нужен функциональный интерфейс LongToIntFunction?
268
269 2 Александр Александров
Представляет собой функцию, которая принимает один аргумент типа long, и возвращает результат типу int.
270
271 1 Александр Александров
h3. Для чего нужен функциональный интерфейс LongUnaryOperator?
272
273 2 Александр Александров
Представляет собой операцию над одним аргументом типа long, возвращает результат типу long.
274
275 1 Александр Александров
h3. Для чего нужен функциональный интерфейс ObjDoubleConsumer<T>?
276
277 2 Александр Александров
Представляет собой операцию, которая принимает один аргумент типа object, и второй типа double, и не возвращает результат.
278
279 1 Александр Александров
h3. Для чего нужен функциональный интерфейс ObjIntConsumer<T>?
280
281 2 Александр Александров
Представляет собой операцию, которая принимает один аргумент типа object, и второй типа int, и не возвращает результат.
282
283 1 Александр Александров
h3. Для чего нужен функциональный интерфейс ObjLongConsumer<T>?
284
285 2 Александр Александров
Представляет собой операцию, которая принимает один аргумент типа object, и второй типа long, и не возвращает результат.
286
287 1 Александр Александров
h3. Для чего нужен функциональный интерфейс Predicate<T>?
288
289 2 Александр Александров
Представляет собой предикат (булеву функцию) одного аргумента.
290
291 1 Александр Александров
h3. Для чего нужен функциональный интерфейс Supplier<T>?
292
293 2 Александр Александров
Представляет собой поставщика результатов.
294
295 1 Александр Александров
h3. Для чего нужен функциональный интерфейс ToDoubleBiFunction<T,U>?
296
297 2 Александр Александров
Представляет собой функцию, которая принимает два аргумента, возвращает результат типу double.
298
299 1 Александр Александров
h3. Для чего нужен функциональный интерфейс ToDoubleFunction<T>?
300
301 2 Александр Александров
Представляет собой функцию, которая принимает один аргумент, возвращает результат типа double.
302
303 1 Александр Александров
h3. Для чего нужен функциональный интерфейс ToIntBiFunction<T,U>?
304
305 2 Александр Александров
Представляет собой функцию, которая принимает два аргумента, возвращает результат типу int.
306
307 1 Александр Александров
h3. Для чего нужен функциональный интерфейс ToIntFunction<T>?
308
309 2 Александр Александров
Представляет собой функцию, которая принимает один аргумент, возвращает результат типа int.
310
311 1 Александр Александров
h3. Для чего нужен функциональный интерфейс ToLongBiFunction<T,U>?
312
313 2 Александр Александров
Представляет собой функцию, которая принимает два аргумента, возвращает результат типу long.
314
315 1 Александр Александров
h3. Для чего нужен функциональный интерфейс ToLongFunction<T>?
316
317 2 Александр Александров
Представляет собой функцию, которая принимает один аргумент, возвращает результат типа long.
318
319 1 Александр Александров
h3. Для чего нужен функциональный интерфейс UnaryOperator<T>?
320 2 Александр Александров
321
Представляет собой операцию над одним операндом, возвращает результат того же типа, что и операнд.
322 1 Александр Александров
323
h3. Что такое StringJoiner?
324
325 3 Александр Александров
StringJoiner используется, чтобы создать последовательность символов, разделенных разделителем, может (но это не обязательно) начинаться с префикса и заканчиваться суффиксом. Пример:
326
327
{{dmsf_image(210)}}
328
329 1 Александр Александров
h3. Что такое default методы?
330
331 3 Александр Александров
Начиная с Java 8 мы можем использовать в интерфейсах стандартные методы (default methods) и статические методы (static methods). Default метод - это метод в интерфейсе с по умолчанию реализованной логикой, который не требуется обязательно определять в реализации этого интерфейса.
332
333
{{dmsf_image(211)}}
334
335 1 Александр Александров
h3. Что такое static методы?
336
337 3 Александр Александров
Static-методы в интерфейсе - это по существу то же самое, что static-методы в абстрактном классе.
338
339
* Статические методы в интерфейсе являются частью интерфейса, мы не можем использовать его для объектов класса реализации.
340
* Статические методы в интерфейсе хороши для обеспечения вспомогательных методов, например, проверки на null, сортировки коллекций и т.д.
341
* Статические методы в интерфейсе помогают обеспечивать безопасность, не позволяя классам, которые реализуют интерфейс, переопределить их.
342
* Мы не можем определить статические методы для методов класса Object, потому что получим ошибку компиляции.
343
344 1 Александр Александров
h3. Как вызывать default-метод интерфейса в классе?
345
346 3 Александр Александров
Используя ключевое слово super вместе с именем интерфейса.
347
348
{{dmsf_image(212)}}
349
350 1 Александр Александров
h3. Как вызывать static-метод интерфейса в классе?
351
352 3 Александр Александров
Используя имя интерфейса.
353 1 Александр Александров
354 3 Александр Александров
{{dmsf_image(213)}}
355
356
h3. Что такое потоки(stream) в Java 8?
357
358
*java.util.stream* - введен для поддержки распараллеливания вычислений в потоках. Предоставляет возможность обрабатывать последовательность элементов исполняя одну или несколько операций, которые могут выполняться либо последовательно либо паралельно. Потоки делятся на последовательные и параллельные. Самая большая польза от этого - в работе с коллекциями.
359
360
Операции над потоком относятся либо к промежуточным, либо к терминальным. Все промежуточные операции возвращают поток, так что мы можем объединять несколько промежуточных операций без использования точки с запятой. Терминальные операции возвращают void или непотоковый результат.
361
362 1 Александр Александров
h3. Для чего нужен метод collect Java 8?
363
364 3 Александр Александров
Большинство операций класса Stream, которые модифицируют набор данных, возвращают этот набор в виде потока. Однако бывают ситуации, когда хотелось бы получить данные не в виде потока, а в виде обычной коллекции, например, ArrayList или HashSet. И для этого у класса Stream определен метод collect. Метод принимает в качестве параметра функцию преобразования к коллекции:
365
366
*<R,A> R collect(Collector<? super T,A,R> collector)* 
367
368
Параметр R представляет тип результата метода, параметр Т - тип элемента в потоке, а параметр А - тип промежуточных накапливаемых данных. В итоге параметр collector представляет функцию преобразования потока в коллекцию.
369
370 1 Александр Александров
h3. В чем разница между коллекцией(Collection) и потоком(Stream)?
371
372 3 Александр Александров
Разница между коллекцией(Collection) данных и потоком(Stream) из новой JDK8 в том что коллекции позволяют работать с элементами по-отдельности, тогда как поток(Stream) не позволяет. Например, с использованием коллекций, вы можете добавлять элементы, удалять, и вставлять в середину. Поток(Stream) не позволяет манипулировать отдельными элементами из набора данных, но вместо этого позволяет выполнять функции над данными как одним целом.
373
374 1 Александр Александров
h3. Для чего предназначен метод forEach в потоках(stream)?
375
376 3 Александр Александров
Метод void forEach(Consumer<? super T> action) - для каждого элемента выполняется действие action. forEach является терминальной операцией, используется для перебора каждого элемента потока. forEach не гарантирует последовательности вывода элементов в параллельном stream-е, для этого используется метод forEachOrdered - он это гарантирует.
377
378 1 Александр Александров
h3. Как вывести на экран 10 случайных чисел, используя forEach?
379
380 3 Александр Александров
Следующий фрагмент кода показывает, как вывести 10 случайных чисел с помощью forEach
381
382
{{dmsf_image(214)}}
383
384 1 Александр Александров
h3. Для чего предназначен метод map в потоках(stream)?
385
386 3 Александр Александров
Метод <R> Stream<R> map(Function<? super T,? extends R> mapper) - преобразует элементы типа T в элементы типа R и возвращает поток с элементами R. map является промежуточной операцией, метод используется для преобразования элементов в другой объект при помощи переданной функции.
387
388 1 Александр Александров
h3. Как можно вывести на экран уникальные квадраты чисел используя метод map?
389
390 3 Александр Александров
Следующий фрагмент кода демонстрирует это, используя метод map.
391
392
{{dmsf_image(215)}}
393
394 1 Александр Александров
h3. Какова цель метода filter в потоках(stream)?
395
396 3 Александр Александров
Метод Stream<T> Filter(Predicate<? super T> predicate) - фильтрует элементы в соответствии с условием в предикате. Filter является промежуточной операцией, используется для фильтрации массива через функцию. На самом деле Filter, не выполняет фильтрацию, вместо этого он создается новый поток, который по завершению формирования, содержит элементы исходного потока, которые соответствуют заданному предикату
397
398 1 Александр Александров
h3. Как вывести на экран количество пустых строк с помощью метода filter?
399
400 3 Александр Александров
Следующий фрагмент кода демонстрирует это с помощью метода Ùlter.
401
402
{{dmsf_image(216)}}
403
404 1 Александр Александров
h3. Для чего предназначен метод limit в потоках(stream)?
405
406 3 Александр Александров
Метод Stream<T> limit(long maxSize) - оставляет в потоке только maxSize элементов. limit является промежуточной операцией, используется для выборки первых maxSize элементов потока. Этот метод также возвращает модифицированный поток, в котором не более maxSize элементов.
407
408 1 Александр Александров
h3. Для чего предназначен метод sorted в потоках(stream)?
409
410 3 Александр Александров
Метод Stream<T> sorted()/Stream<T> sorted(Comparator<? super T> comparator) - возвращает отсортированный поток. sorted является промежуточной операцией, метод используется для сортировки потока используя естественный порядок сравнения его элементов. Существует также второй метод sorted(), принимающий либо экземпляр Comparable, либо соответствующее ему лямбда-выражение.
411
412 1 Александр Александров
h3. Как вывести на экран 10 случайных чисел в отсортированном порядке в Java 8?
413
414 3 Александр Александров
Следующий фрагмент кода демонстрирует это:
415
416
{{dmsf_image(217)}}
417
418 1 Александр Александров
h3. Параллельная обработка в Java 8?
419
420 3 Александр Александров
Чтобы сделать обычный последовательный поток параллельным, надо вызвать у объекта Stream метод parallel. Кроме того, можно также использовать метод parallelStream() интерфейса Collection для создания
421
параллельного потока из коллекции. 
422
423
В то же время если рабочая машина не является многоядерной, то поток будет выполняться как последовательный. Следующий фрагмент кода, выводит количество пустых строк с помощью метода parallelStream.
424
425
{{dmsf_image(218)}}
426
427 1 Александр Александров
h3. Как найти максимальное число в списке Java 8?
428
429 3 Александр Александров
Следующий код выводит наибольшее число которое присутствует в списке.
430
431
{{dmsf_image(219)}}
432
433 1 Александр Александров
h3. Как найти минимальное число в списке Java 8?
434
435 3 Александр Александров
Следующий код выводит минимальное число которое присутствует в списке.
436
437
{{dmsf_image(220)}}
438
439 1 Александр Александров
h3. Как получить сумму всех чисел в списке, используя Java 8?
440
441 3 Александр Александров
Следующий код выведет сумму всех чисел.
442
443
{{dmsf_image(221)}}
444
445 1 Александр Александров
h3. Как получить среднее значение всех чисел, в списке, используя Java 8?
446
447 3 Александр Александров
Следующий код выведет среднее значение всех чисел.
448
449
{{dmsf_image(222)}}
450
451 1 Александр Александров
h3. Что такое Optional?
452
453 3 Александр Александров
Optional - это контейнер объекта, он может содержать значение или некоторый тип Т, или просто быть null. Он предоставляет много полезных методов избавляющие от добавления повторяющихся if null/notNull проверок, что позволяет нам сфокусироваться на том, что мы хотим сделать. Метод isPresent() возвращает true если экземпляр Optional содержит не null значение и false в противном случае. Метод orElseGet() содержит запасной механизм результата, если Optional содержит null, принимая функции для генерации значения по умолчанию. Метод map() преобразует текущее значение Optional и возвращает новый экземпляр Optional. Метод orElse() похож на orElseGet(), но вместо функции он принимает значение по умолчанию.
454
455 1 Александр Александров
h3. Что такое Nashorn?
456
457 3 Александр Александров
Nashorn - это движок JavaScript, разрабатываемый полностью на Java компанией Oracle. Он призван дать возможность встраивать код JavaScript в приложения Java. В сравнении с Rhino, который поддерживается Mozilla Foundation, Nashorn обеспечивает от 2 до 10 раз более высокую производительность, так как он непосредственно компилирует код в памяти и передает байт-код виртуальной машине Java. Nashorn умеет компилировать код JavaScript и генерировать классы Java, которые загружаются специальным загрузчиком. Возможен вызов кода Java прямо из JavaScript.
458
459 1 Александр Александров
h3. Что такое jjs в Java 8?
460
461 3 Александр Александров
Nashorn поставляется с cmd-утилитой jjs, которая позволяет исполнять JavaScript прямо в консоли. jjs принимает список JavaScript файлов исходного кода и запускает их. Чтобы запустить файл давайте передадим его как аргумент в jjs: jjs FileName.js
462
463 1 Александр Александров
h3. Что такое LocalDateTime в Java 8?
464
465 3 Александр Александров
LocalDateTime объединяет вместе LocaleDate и LocalTime и содержит дату и время, но без часового пояса в календарной системе ISO-8601. Время хранится с точностью до наносекунды, так что в LocalTime можно хранить, например, величину "13:45.30.123456789". Есть множество удобных методов, таких как plusMinutes, plusHours, isAfter, toSecondOfDay и т.д
466
467 1 Александр Александров
h3. Что такое ZonedDateTime в Java 8?
468
469 3 Александр Александров
ZonedDateTime - аналог java.util.Calendar. Это самый мощный класс с полной информацией о временном контексте, включает временную зону. Он содержит дату и время в календарной системе ISO-8601.
470
471 1 Александр Александров
h3. Как получить текущую дату с использованием time API из Java 8?
472
473 3 Александр Александров
Следующий код выводит текущую дату.
474
475
{{dmsf_image(223)}}
476
477 1 Александр Александров
h3. Как добавить 1 неделю к текущей дате с использованием time API?
478
479 3 Александр Александров
Следующий код добавляет 1 неделю к текущей дате.
480
481
{{dmsf_image(224)}}
482
483 1 Александр Александров
h3. Как добавить 1 месяц к текущей дате с использованием time API?
484
485 3 Александр Александров
Следующий код добавляет 1 месяц к текущей дате.
486
487
{{dmsf_image(225)}}
488
489 1 Александр Александров
h3. Как добавить 1 год к текущей дате с использованием time API?
490
491 3 Александр Александров
Следующий код добавляет 1 год к текущей дате.
492
493
{{dmsf_image(226)}}
494
495 1 Александр Александров
h3. Как добавить 10 лет к текущей дате с использованием time API?
496
497 3 Александр Александров
Следующий код добавляет 10 лет к текущей дате.
498
499
{{dmsf_image(227)}}
500
501 1 Александр Александров
h3. Как получить следующий вторник используя time API?
502
503 3 Александр Александров
Следующий код возвращает следующий вторник.
504
505
{{dmsf_image(228)}}
506
507 1 Александр Александров
h3. Как получить вторую субботу текущего месяца используя time API?
508
509 3 Александр Александров
Следующий код демонстрирует это.
510
511
{{dmsf_image(229)}}
512
513 1 Александр Александров
h3. Как получить текущею дату в миллисекундах используя time API?
514
515 3 Александр Александров
Следующий код возвращает дату в миллисекундах.
516
517
{{dmsf_image(230)}}
518
519 1 Александр Александров
h3. Как получить текущею дату по местному времени в миллисекундах используя используя time API?
520
521 3 Александр Александров
Следующий код демонстрирует это.
522
523
{{dmsf_image(231)}}
524
525 1 Александр Александров
h3. Какой класс появился в Java 8 для декодирования данных?
526
527 3 Александр Александров
В Java 8 для этого появился класс public static class Base64.Decoder - этот класс реализует декодер для декодирования байт данных, используя схему кодирования Base64 как указано в RFC 4648 и RFC 2045, класс безопасен для использования несколькими параллельными потоками.
528
529 1 Александр Александров
h3. Какой класс появился в Java 8 для кодирования данных?
530
531 3 Александр Александров
В Java 8 для этого появился класс public static class Base64.Encoder - этот класс реализует кодер для кодирования байт данных, используя схему кодирования Base64 как указано в RFC 4648 и RFC 2045, класс безопасен для использования несколькими параллельными потоками.
532
533 1 Александр Александров
h3. Как создать Base64 декодировщик?
534
535 3 Александр Александров
Используя метод getDecoder() класса Base64 он возвращает декодировщик Base64.Decoder, который декодирует данные с помощью схемы кодирования base64.
536
537 1 Александр Александров
h3. Как создать Base64 кодировщик?
538 3 Александр Александров
539
Используя метод getEncoder() класса Base64 он возвращает кодировщик Base64.Encoder, который кодирует данные с помощью схемы кодирования base64.
Go to top