Skip to content

Commit 9f70a99

Browse files
Cupcake-masterenhorse
authored andcommitted
Update java8.md
1 parent cec5fd8 commit 9f70a99

1 file changed

Lines changed: 24 additions & 24 deletions

File tree

java8.md

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ public static void main(String[] args) {
126126
operation = (int x, int y) -> x + y;
127127
//При написании самого лямбда-выражения тип параметров разрешается не указывать:
128128
(x, y) -> x + y;
129-
//Если метод не принимает никаких параметров, то пишутся пустые скобки, например:
129+
//Если метод не принимает никаких параметров, то пишутся пустые скобки, например,
130130
() -> 30 + 20;
131131
//Если метод принимает только один параметр, то скобки можно опустить:
132132
n -> n * n;
@@ -230,7 +230,7 @@ public static void main(String[] args) {
230230
## Какие виды ссылок на методы вы знаете?
231231
+ на статический метод;
232232
+ на метод экземпляра;
233-
+ на конструктор.
233+
+ на конструкторе.
234234

235235
[к оглавлению](#java-8)
236236

@@ -259,9 +259,9 @@ Function<String, String> backToString = toInteger.andThen(String::valueOf);
259259
backToString.apply("123"); // "123"
260260
```
261261

262-
+ `DoubleFunction<R>` - функция получающая на вход `Double` и возвращающая на выходе экземпляр класса `R`;
263-
+ `IntFunction<R>` - функция получающая на вход `Integer` и возвращающая на выходе экземпляр класса `R`;
264-
+ `LongFunction<R>` - функция получающая на вход `Long` и возвращающая на выходе экземпляр класса `R`.
262+
+ `DoubleFunction<R>` - функция, получающая на вход `Double` и возвращающая на выходе экземпляр класса `R`;
263+
+ `IntFunction<R>` - функция, получающая на вход `Integer` и возвращающая на выходе экземпляр класса `R`;
264+
+ `LongFunction<R>` - функция, получающая на вход `Long` и возвращающая на выходе экземпляр класса `R`.
265265

266266
[к оглавлению](#java-8)
267267

@@ -273,9 +273,9 @@ UnaryOperator<Integer> operator = x -> x * x;
273273
System.out.println(operator.apply(5)); // 25
274274
```
275275

276-
+ `DoubleUnaryOperator` - унарный оператор получающий на вход `Double`;
277-
+ `IntUnaryOperator` - унарный оператор получающий на вход `Integer`;
278-
+ `LongUnaryOperator` - унарный оператор получающий на вход `Long`.
276+
+ `DoubleUnaryOperator` - унарный оператор, получающий на вход `Double`;
277+
+ `IntUnaryOperator` - унарный оператор, получающий на вход `Integer`;
278+
+ `LongUnaryOperator` - унарный оператор, получающий на вход `Long`.
279279

280280
[к оглавлению](#java-8)
281281

@@ -286,9 +286,9 @@ BinaryOperator<Integer> operator = (a, b) -> a + b;
286286
System.out.println(operator.apply(1, 2)); // 3
287287
```
288288

289-
+ `DoubleBinaryOperator` - бинарный оператор получающий на вход `Double`;
290-
+ `IntBinaryOperator` - бинарный оператор получающий на вход `Integer`;
291-
+ `LongBinaryOperator` - бинарный оператор получающий на вход `Long`.
289+
+ `DoubleBinaryOperator` - бинарный оператор, получающий на вход `Double`;
290+
+ `IntBinaryOperator` - бинарный оператор, получающий на вход `Integer`;
291+
+ `LongBinaryOperator` - бинарный оператор, получающий на вход `Long`.
292292

293293
[к оглавлению](#java-8)
294294

@@ -303,9 +303,9 @@ predicate.test("foo"); // true
303303
predicate.negate().test("foo"); // false
304304
```
305305

306-
+ `DoublePredicate` - предикат получающий на вход `Double`;
307-
+ `IntPredicate` - предикат получающий на вход `Integer`;
308-
+ `LongPredicate` - предикат получающий на вход `Long`.
306+
+ `DoublePredicate` - предикат, получающий на вход `Double`;
307+
+ `IntPredicate` - предикат, получающий на вход `Integer`;
308+
+ `LongPredicate` - предикат, получающий на вход `Long`.
309309

310310
[к оглавлению](#java-8)
311311

@@ -317,9 +317,9 @@ Consumer<String> hello = (name) -> System.out.println("Hello, " + name);
317317
hello.accept("world");
318318
```
319319

320-
+ `DoubleConsumer` - потребитель получающий на вход `Double`;
321-
+ `IntConsumer` - потребитель получающий на вход `Integer`;
322-
+ `LongConsumer` - потребитель получающий на вход `Long`.
320+
+ `DoubleConsumer` - потребитель, получающий на вход `Double`;
321+
+ `IntConsumer` - потребитель, получающий на вход `Integer`;
322+
+ `LongConsumer` - потребитель, получающий на вход `Long`.
323323

324324
[к оглавлению](#java-8)
325325

@@ -331,9 +331,9 @@ Supplier<LocalDateTime> now = LocalDateTime::now;
331331
now.get();
332332
```
333333

334-
+ `DoubleSupplier` - поставщик возвращающий `Double`;
335-
+ `IntSupplier` - поставщик возвращающий `Integer`;
336-
+ `LongSupplier` - поставщик возвращающий `Long`.
334+
+ `DoubleSupplier` - поставщик, возвращающий `Double`;
335+
+ `IntSupplier` - поставщик, возвращающий `Integer`;
336+
+ `LongSupplier` - поставщик, возвращающий `Long`.
337337

338338
[к оглавлению](#java-8)
339339

@@ -489,15 +489,15 @@ optional.orElse("ops..."); // "hello"
489489

490490
Стримы создаются на основе источников каких-либо, например классов из `java.util.Collection`.
491491

492-
Ассоциативные массивы (maps), например `HashMap`, не поддерживаются.
492+
Ассоциативные массивы (maps), например, `HashMap`, не поддерживаются.
493493

494494
Операции над стримами могут выполняться как последовательно, так и параллельно.
495495

496496
Потоки не могут быть использованы повторно. Как только была вызвана какая-нибудь конечная операция, поток закрывается.
497497

498498
Кроме универсальных объектных существуют особые виды стримов для работы с примитивными типами данных `int`, `long` и `double`: `IntStream`, `LongStream` и `DoubleStream`. Эти примитивные стримы работают так же, как и обычные объектные, но со следующими отличиями:
499499

500-
+ используют специализированные лямбда-выражения, например `IntFunction` или `IntPredicate` вместо `Function` и `Predicate`;
500+
+ используют специализированные лямбда-выражения, например, `IntFunction` или `IntPredicate` вместо `Function` и `Predicate`;
501501
+ поддерживают дополнительные конечные операции `sum()`, `average()`, `mapToObj()`.
502502

503503
[к оглавлению](#java-8)
@@ -541,7 +541,7 @@ Stream<String> fromGenerate = Stream.generate(() -> "0");
541541
## В чем разница между `Collection` и `Stream`?
542542
Коллекции позволяют работать с элементами по-отдельности, тогда как стримы так делать не позволяют, но вместо этого предоставляют возможность выполнять функции над данными как над одним целым.
543543

544-
Также стоит отметить важность самой концепции сущностей: `Collection` - это прежде всего воплощение _Структуры Данных_. Например `Set` не просто хранит в себе элементы, он реализует идею множества с уникальными элементами,
544+
Также стоит отметить важность самой концепции сущностей: `Collection` - это прежде всего воплощение _Структуры Данных_. Например, `Set` не просто хранит в себе элементы, он реализует идею множества с уникальными элементами,
545545
тогда как `Stream`, это прежде всего абстракция необходимая для реализации _конвеера вычислений_, собственно поэтому, результатом работы конвеера являются те или иные _Структуры Данных_ или же результаты проверок/поиска и т.п.
546546

547547
[к оглавлению](#java-8)
@@ -649,7 +649,7 @@ collection
649649
+ Количество ядер процессора. Теоретически, чем больше ядер в компьютере, тем быстрее программа будет работать. Если на машине одно ядро, нет смысла применять параллельные потоки.
650650
+ Чем проще структура данных, с которой работает поток, тем быстрее будут происходить операции. Например, данные из `ArrayList` легко использовать, так как структура данной коллекции предполагает последовательность несвязанных данных. А вот коллекция типа `LinkedList` - не лучший вариант, так как в последовательном списке все элементы связаны с предыдущими/последующими. И такие данные трудно распараллелить.
651651
+ Над данными примитивных типов операции будут производиться быстрее, чем над объектами классов.
652-
+ Крайне не рекомендуется использовать параллельные стримы для сколько-нибудь долгих операций (например сетевых соединений), так как все параллельные стримы работают c одним `ForkJoinPool`, то такие долгие операции могут остановить работу всех параллельных стримов в JVM из-за отсутствия доступных потоков в пуле, т.е. параллельные стримы стоит использовать лишь для коротких операций, где счет идет на миллисекунды, но не для тех где счет может идти на секунды и минуты;
652+
+ Крайне не рекомендуется использовать параллельные стримы для скольких-нибудь долгих операций (например, сетевых соединений), так как все параллельные стримы работают c одним ForkJoinPool, то такие долгие операции могут остановить работу всех параллельных стримов в JVM из-за отсутствия доступных потоков в пуле, т.е. параллельные стримы стоит использовать лишь для коротких операций, где счет идет на миллисекунды, но не для тех где счет может идти на секунды и минуты;
653653
+ Сохранение порядка в параллельных стримах увеличивает издержки при выполнении и если порядок не важен, то имеется возможность отключить его сохранение и тем самым увеличить производительность, использовав промежуточную операцию `unordered()`:
654654

655655
```java

0 commit comments

Comments
 (0)