10 Π»ΡΡΡΠΈΡ
ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ² IntelliJ IDEA, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ²ΡΡΡΡ Π²Π°ΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ
ΠΡΡΠΎΡΠ½ΠΈΠΊ:
Hackernoon
ΠΠ΅Π΄Π°Π²Π½ΠΎ Ρ ΠΏΠΎΠΈΠ½ΡΠ΅ΡΠ΅ΡΠΎΠ²Π°Π»ΡΡ Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΡ
IntelliJ IDEA, ΠΊΠ°ΠΊΠΈΠ΅ ΠΏΠ»Π°Π³ΠΈΠ½Ρ Π΄Π»Ρ ΡΡΠΎΠΉ IDE ΠΈΠΌ Π±ΠΎΠ»ΡΡΠ΅ Π²ΡΠ΅Π³ΠΎ Π½ΡΠ°Π²ΡΡΡΡ? ΠΠ° ΠΎΡΠ½ΠΎΠ²Π΅ ΡΠΎΠ±ΡΠ°Π½Π½ΡΡ
ΠΎΡΠ²Π΅ΡΠΎΠ² ΠΏΠΎΠ»ΡΡΠΈΠ»ΡΡ ΡΠΏΠΈΡΠΎΠΊ ΠΈΠ· 10 Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΡ
ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠΉ.
![ΠΠΎΡΠ΅-Π±ΡΠ΅ΠΉΠΊ #89. 10 Π»ΡΡΡΠΈΡ
ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ² IntelliJ IDEA, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ²ΡΡΡΡ Π²Π°ΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ. ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ Π² Java Streams Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° - 1]()
1. WakaTime
WakaTime ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²ΠΈΠ΄Π΅ΡΡ ΠΌΠ΅ΡΡΠΈΠΊΠΈ, Π°Π½Π°Π»ΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΠΈ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°ΡΡ Π²ΡΠ΅ΠΌΡ, ΠΏΠΎΡΡΠ°ΡΠ΅Π½Π½ΠΎΠ΅ Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅. Π‘ Π½ΠΈΠΌ Π²Ρ ΡΠΎΡΠ½ΠΎ ΡΠ·Π½Π°Π΅ΡΠ΅, ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΡΡΠ°ΡΠΈΡΠ΅ Π½Π° ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΏΠ»Π°Π³ΠΈΠ½ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π΅Ρ, ΠΊΠΎΠ³Π΄Π° Π²Ρ Π½Π°ΡΠΈΠ½Π°Π΅ΡΠ΅ ΠΈ ΠΏΡΠ΅ΠΊΡΠ°ΡΠ°Π΅ΡΠ΅ ΠΏΠ΅ΡΠ°ΡΠ°ΡΡ, Ρ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΡΠΌΠΈ ΠΌΠ΅ΡΡΠΈΠΊΠ°ΠΌΠΈ Π΄Π»Ρ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ², ΡΠ°ΠΉΠ»Π°, Π²Π΅ΡΠΊΠΈ, ΡΠΈΠΊΡΠ°ΡΠΈΠΈ / PR, ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ³ΠΎ Π΄ΡΡΠ³ΠΎΠ³ΠΎ.
2. Stepsize
ΠΡΠΎΡ ΠΏΠ»Π°Π³ΠΈΠ½ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ ΠΏΡΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌ, ΡΠ²ΡΠ·Π°Π½Π½ΡΡ
Ρ ΡΠ΅Ρ
Π½ΠΈΡΠ΅ΡΠΊΠΈΠΌ Π΄ΠΎΠ»Π³ΠΎΠΌ, ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΈ ΡΠ΅ΡΠ°ΠΊΡΠΎΡΠΈΠ½Π³ΠΎΠΌ ΠΊΠΎΠ΄Π°. Stepsize ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ:
- Π΄Π΅Π»Π°ΡΡ Π·Π°ΠΊΠ»Π°Π΄ΠΊΠΈ Π² ΠΊΠΎΠ΄Π΅;
- ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°ΡΡ ΡΠ΅Ρ
Π½ΠΈΡΠ΅ΡΠΊΠΈΠΉ Π΄ΠΎΠ»Π³ ΠΏΡΡΠΌΠΎ ΠΎΡ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ°;
- ΡΠΎΠ·Π΄Π°ΡΡ TODO;
- ΡΠ°ΡΡΡΠ°Π²Π»ΡΡΡ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΡ ΠΏΠΎ ΡΠ΅Ρ
Π½ΠΈΡΠ΅ΡΠΊΠΈΠΌ Π²ΠΎΠΏΡΠΎΡΠ°ΠΌ ΠΏΡΠΈ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΡΠΏΡΠΈΠ½ΡΠ°;
- ΡΠΎΡΡΡΠ΄Π½ΠΈΡΠ°ΡΡ Ρ ΠΊΠΎΠ»Π»Π΅Π³Π°ΠΌΠΈ ΠΏΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π½ΠΈΡ ΠΈ ΡΠ΅ΡΠ°ΠΊΡΠΎΡΠΈΠ½Π³Π° ΠΊΠΎΠ΄Π°.
3. Key Promoter X
Key Promoter X ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ Π²Π°ΠΌ Π²ΡΡΡΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠ»ΡΠΊΠΎΠ² ΠΈ ΠΊΠ½ΠΎΠΏΠΎΠΊ Π² IntelliJ IDEA. ΠΠΎΠ³Π΄Π° Π²Ρ Π½Π°Π²ΠΎΠ΄ΠΈΡΠ΅ ΠΌΡΡΡ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡ Π²Π½ΡΡΡΠΈ IDE, Key Promoter X ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π²Π°ΠΌ ΡΠΎΡΠ΅ΡΠ°Π½ΠΈΠ΅ ΠΊΠ»Π°Π²ΠΈΡ, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²ΠΌΠ΅ΡΡΠΎ Π½Π°ΠΆΠ°ΡΠΈΡ ΠΌΡΡΠΈ.
4. ZIO Π΄Π»Ρ IntelliJ
ZIO ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡ Π²Π°ΠΌ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡ, ΡΠ΅ΡΠ°ΠΊΡΠΎΡΠΈΠ½Π³ΠΈ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠ»ΡΡΡΠ΅Π½ΠΈΡ Π΄Π»Ρ ΡΠΊΠΎΡΠΈΡΡΠ΅ΠΌΡ Scala ZIO. ΠΠ»Π°Π³ΠΈΠ½ ΡΠ°ΡΡΠΈΡΡΠ΅Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ ZIO ΡΠ°ΠΊΠΈΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ, ΠΊΠ°ΠΊ:
- ΡΠ΅ΡΠ°ΠΊΡΠΎΡΠΈΠ½Π³ ΠΈ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡ;
- ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° zio-ΠΌΠ°ΠΊΡΠΎΡΠΎΠ² (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, @accessible);
- Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠΉ ΡΠ΅ΡΡΠΎΠ²ΡΠΉ ΠΏΡΠΎΠ³ΠΎΠ½.
5. Protobuf
ΠΠ»Π°Π³ΠΈΠ½
Protobuf Language Π΄Π»Ρ IDE Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ IntelliJ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ ΡΠ·ΡΠΊΠ° Protobuf. Protobuf ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ Ρ Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ°, ΠΈΠΌΠΏΠΎΡΡΠΎΠΌ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΈ SDK, Π½Π°Π²ΠΈΠ³Π°ΡΠΈΠ΅ΠΉ, ΡΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠ΄Π°, ΡΠ΅ΠΌΠ°Π½ΡΠΈΡΠ΅ΡΠΊΠΈΠΌ Π°Π½Π°Π»ΠΈΠ·ΠΎΠΌ ΠΈ Π±ΡΡΡΡΠΎΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠ΅ΠΉ.
6. SonarLint
SonarLint ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΡΠΏΡΠ°Π²Π»ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Ρ ΠΊΠΎΠ΄ΠΎΠΌ Π΄ΠΎ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡΡ. ΠΠ°ΠΊ ΡΡΠ΅Π΄ΡΡΠ²ΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΎΡΡΠΎΠ³ΡΠ°ΡΠΈΠΈ, SonarLint Π²ΡΠ΄Π΅Π»ΡΠ΅Ρ ΠΎΡΠΈΠ±ΠΊΠΈ ΠΈ ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ ΠΏΡΠΈ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈ ΠΊΠΎΠ΄Π° Ρ ΡΠ΅ΡΠΊΠΈΠΌΠΈ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡΠΌΠΈ ΠΏΠΎ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ, ΡΡΠΎΠ±Ρ Π²Ρ ΠΌΠΎΠ³Π»ΠΈ ΠΈΡΠΏΡΠ°Π²ΠΈΡΡ ΠΈΡ
Π΅ΡΠ΅ Π΄ΠΎ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΊΠΎΠ΄ Π±ΡΠ΄Π΅Ρ Π·Π°ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½. SonarLint Π² VS Code ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Π°Π½Π°Π»ΠΈΠ· ΠΊΠΎΠ΄Π° Π² Java, JavaScript, TypeScript, Python, HTML ΠΈ PHP.
7. ESLint
ESLint ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠΉ eslint Π² Π²ΠΈΠ΄Π΅ ΠΈΠ½ΡΠΏΠ΅ΠΊΡΠΈΠΉ IntelliJ, ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π±ΡΡΡΡΡΠ΅ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π΄Π»Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ
ΠΏΡΠ°Π²ΠΈΠ», ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π° eslint, Π° ΡΠ°ΠΊΠΆΠ΅ Π°Π½Π½ΠΎΡΠ°ΡΠΈΡ ΠΈ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ eslint.
8. Prettier
Π Π°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅
Prettier ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ ΠΊΠΎΠ΄Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ Π»ΡΡΡΠ΅ ΠΈ Π±ΡΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΡΠΌ. ΠΠ½ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΡΠΉ ΡΡΠΈΠ»Ρ, Π°Π½Π°Π»ΠΈΠ·ΠΈΡΡΡ Π²Π°Ρ ΠΊΠΎΠ΄ ΠΈ ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΡΠ²Π°Ρ Π΅Π³ΠΎ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ ΡΠΎ ΡΠ²ΠΎΠΈΠΌΠΈ ΠΏΡΠ°Π²ΠΈΠ»Π°ΠΌΠΈ ΠΈ ΡΡΠ΅ΡΠΎΠΌ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ ΡΡΡΠΎΠΊΠΈ.
9. Quokka
Quokka.js β ΡΡΠΎ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ ΠΏΠΎΠ²ΡΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° Π΄Π»Ρ Π±ΡΡΡΡΠΎΠ³ΠΎ ΠΏΡΠΎΡΠΎΡΠΈΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ JavaScript / TypeScript. Π IDE ΠΎΠ½ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅Ρ ΠΏΠΎΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠ΄ΠΎΠΌ Ρ ΠΊΠΎΠ΄ΠΎΠΌ ΠΏΠΎ ΠΌΠ΅ΡΠ΅ Π²Π²ΠΎΠ΄Π°. ΠΡΠΎ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΡΠΊΠΎΡΡΠ΅Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΡΠΎΡΠΎΡΠΈΠΏΠΎΠ², ΠΎΠ±ΡΡΠ΅Π½ΠΈΠ΅ ΠΈ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ JavaScript / TypeScript.
10. AceJump
AceJump ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π±ΡΡΡΡΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°ΡΡ ΠΊΡΡΡΠΎΡ Π² Π»ΡΠ±ΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ, Π²ΠΈΠ΄ΠΈΠΌΡΡ Π² ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ΅. ΠΡΠΎΡΡΠΎ Π½Π°ΠΆΠΌΠΈΡΠ΅ βCRTL+;β, Π²Π²Π΅Π΄ΠΈΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ», Π·Π°ΡΠ΅ΠΌ Π²Π²Π΅Π΄ΠΈΡΠ΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΡΠΈΠΌΠ²ΠΎΠ» Π΄Π»Ρ Ace Jump. ΠΡΠ»ΠΈ Π½Π° ΡΠΊΡΠ°Π½Π΅ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΠΉ, AceJump ΠΏΠ΅ΡΠ΅ΠΉΠ΄Π΅Ρ ΠΊ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌΡ ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΠΌΠΎΠΆΠ΅Ρ Π½Π°ΠΉΡΠΈ.
ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ Π² Java Streams Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°
ΠΡΡΠΎΡΠ½ΠΈΠΊ:
Dev.to
![ΠΠΎΡΠ΅-Π±ΡΠ΅ΠΉΠΊ #89. 10 Π»ΡΡΡΠΈΡ
ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ² IntelliJ IDEA, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ²ΡΡΡΡ Π²Π°ΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ. ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ Π² Java Streams Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° - 2]()
ΠΠ΅Π΄Π°Π²Π½ΠΎ Ρ ΠΏΡΠΎΡΠΌΠ°ΡΡΠΈΠ²Π°Π» ΠΊΠΎΠ΄ ΠΈ Π½Π°ΡΠΊΠ½ΡΠ»ΡΡ Π½Π° ΡΡΠΎ-ΡΠΎ Π²ΡΠΎΠ΄Π΅ ΡΡΠΎΠ³ΠΎ:
subject.getIdentities().forEach(i -> {
try {
caseService.updateDocument(i.getCase());
} catch (Exception e) {
log.error(e);
}
});
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ Ρ Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΏΠΎΠΊΠ»ΠΎΠ½Π½ΠΈΠΊ Π»ΡΠΌΠ±Π΄Π°-Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ ΠΈ Π»ΡΠ±Π»Ρ ΠΊΡΠ°ΡΠΊΠΎΡΡΡ, ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠΉ Π²ΡΡΠ΅ ΠΊΠΎΠ΄ ΠΌΠ½Π΅ ΠΊΠ°ΠΆΠ΅ΡΡΡ Π½Π΅ ΠΎΡΠ΅Π½Ρ Π»Π°ΠΊΠΎΠ½ΠΈΡΠ½ΡΠΌ ΠΈ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π·Π°ΠΏΡΡΠ°Π½Π½ΡΠΌ. Π§ΡΠΎΠ±Ρ Π΅Π³ΠΎ ΠΎΡΠΈΡΡΠΈΡΡ, ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ.
Π§ΡΠΎ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ? ΠΡ Π·Π½Π°Π΅ΠΌ, ΡΡΠΎ
forEach ΠΎΠΆΠΈΠ΄Π°Π΅Ρ Π½Π° Π²Ρ
ΠΎΠ΄Π΅ Consumer. ΠΡΠ»ΠΈ Π±Ρ ΠΌΡ ΠΌΠΎΠ³Π»ΠΈ ΠΎΠ±Π΅ΡΠ½ΡΡΡ Π½Π°ΡΡ Π»ΠΎΠ³ΠΈΠΊΡ, ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅, Π² Consumer, ΡΠΎ Π·Π°ΡΠ΅ΠΌ ΠΌΡ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π»ΠΎΠ³ΠΈΠΊΡ Π² forEach.
ΠΡΠ½ΠΎΠ²Π½Π°Ρ Π»ΠΎΠ³ΠΈΠΊΠ° Π²Π½ΡΡΡΠΈ forEach β ΡΡΠΎ ΡΠ»Π΅Π΄ΡΡΡΠ°Ρ ΡΡΡΠΎΠΊΠ°:
i -> caseService.updateDocument(i.getCase());
ΠΡ Π·Π½Π°Π΅ΠΌ ΡΠΈΠΏ Π²Π²ΠΎΠ΄Π° ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°, ΠΈ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ, ΠΌΠ΅ΡΠΎΠ΄ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅.
@FunctionalInterface
public interface ThrowingFunction<Identity, UpdateResponse> {
UpdateResponse apply(Identity i) throws Exception;
}
ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΄Π΅Π»Π°ΡΡ ΠΊΠΎΠ΄ Π΅ΡΠ΅ Π±ΠΎΠ»Π΅Π΅ ΡΠ΄ΠΎΠ±Π½ΡΠΌ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊΠΎΠ².
@FunctionalInterface
public interface ThrowingFunction<T, R> {
R apply(T t) throws Exception;
}
ΠΠΎΡΠ»Π΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ΠΈΡΡ
ΠΎΠ΄Π½Π°Ρ Π»ΠΎΠ³ΠΈΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ ΡΡΠ°ΡΡ ΡΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ:
ThrowingFunction<Identity, UpdateResponse> tf = i -> caseService.updateDocument(i.getCase());
Π’Π΅ΠΏΠ΅ΡΡ, ΠΊΠΎΠ³Π΄Π° Ρ Π½Π°Ρ Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π΄Π»Ρ Π½Π°ΡΠ΅ΠΉ Π»ΠΎΠ³ΠΈΠΊΠΈ, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π΅Π³ΠΎ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΠΌΠ΅ΡΠΎΠ΄Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Consumer, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² forEach.
private static <T, R> Consumer<T> wrap(ThrowingFunction<T, R> f) {
return t -> {
try {
f.apply(t);
} catch (Exception e) {
throw new RuntimeException(e);
}
};
}
ΠΡΠΎ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΡΡΠ°Π½Π½ΠΎ, Π½ΠΎ, ΠΏΠΎ ΡΡΡΠΈ, ΠΌΠ΅ΡΠΎΠ΄ wrap ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ThrowingFunction Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π²Ρ
ΠΎΠ΄Π½ΡΡ
Π΄Π°Π½Π½ΡΡ
ΠΈ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈΠ»ΠΈ ΠΏΠ΅ΡΠ΅Ρ
Π²Π°ΡΡΠ²Π°Π΅Ρ ΠΈ Π²ΡΠ±ΡΠ°ΡΡΠ²Π°Π΅Ρ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π² Consumer.
Π’Π΅ΠΏΠ΅ΡΡ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠ±Π΅ΡΠ½ΡΡΡ Π»ΡΠ±ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ Π»ΠΎΠ³ΠΈΠΊΡ Π² forEach, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ·Π²Π°ΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅. ΠΡΠΎ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ°ΠΊ:
ThrowingFunction<Identity, UpdateResponse> tf = i -> caseService.updateDocument(i.getCase()):
Consumer<Identity> p = wrap(tf);
subject.getIdentities().forEach(p);
ΠΠ»ΠΈ, Π΅ΡΠ»ΠΈ Π²Ρ ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°Π΅ΡΠ΅ ΠΎΠ΄Π½Ρ ΡΡΡΠΎΠΊΡ:
subject.getIdentities().forEach(wrap(i -> caseService.updateDocument(i.getCase())));
Π‘ΠΎΠ³Π»Π°ΡΠΈΡΠ΅ΡΡ, ΡΡΠΎ ΡΠ°ΠΊ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Π»ΡΡΡΠ΅! ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΡΠΎ-ΡΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅ Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ
ΡΠΈΠΏΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ
ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ². ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ
Map ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π²Ρ
ΠΎΠ΄Π½ΡΡ
Π΄Π°Π½Π½ΡΡ
ΡΠΎΠ»ΡΠΊΠΎ
Function. ΠΠΌΠ΅ΡΡΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° ΠΎΠ±Π΅ΡΡΡΠ²Π°Π½ΠΈΡ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΠ΅Π³ΠΎ Consumer, Ρ Π²Π°Ρ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΠΈΠΉ ΡΡΠ½ΠΊΡΠΈΡ.
ΠΡΠΎ Π²ΡΠ΅Π³ΠΎ Π»ΠΈΡΡ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ Π² ΠΏΠΎΡΠΎΠΊΠ°Ρ
. Π― Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΏΠΎΠΌΡΠ½ΡΡΡ, ΡΡΠΎ Π΅ΡΡΡ
Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π΄Π΅Π»Π°ΡΡ ΡΡΠΎ Π·Π° Π²Π°Ρ. Π’Π°ΠΊΠΆΠ΅ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠΎΠ½Π°Π΄Ρ Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΡΠΏΠ΅Ρ
ΠΎΠ² ΠΈΠ»ΠΈ Π½Π΅ΡΠ΄Π°Ρ, Π½ΠΎ ΡΡΠΎ Π²ΡΡ
ΠΎΠ΄ΠΈΡ Π·Π° ΡΠ°ΠΌΠΊΠΈ ΡΡΠΎΠ³ΠΎ ΠΏΠΎΡΡΠ°.