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 β€” это ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ строка:
//try catch removed
// i is an Identity and updateDocument returns a UpdateResponse
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, которая ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅. Π­Ρ‚ΠΎ выглядит ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ:
// target type the original logic
ThrowingFunction<Identity, UpdateResponse> tf = i -> caseService.updateDocument(i.getCase()):

// pass logic to the wrapmethod
// which will execute the function or throw a RunTimeException.
Consumer<Identity> p = wrap(tf);

// use Consumer in foreach
subject.getIdentities().forEach(p);
Или, Ссли Π²Ρ‹ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°Π΅Ρ‚Π΅ ΠΎΠ΄Π½Ρƒ строку:
subject.getIdentities().forEach(wrap(i -> caseService.updateDocument(i.getCase())));
Π‘ΠΎΠ³Π»Π°ΡΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Π»ΡƒΡ‡ΡˆΠ΅! Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… интСрфСйсов. НапримСр, опСрация Map ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π² качСствС Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Function. ВмСсто ΠΌΠ΅Ρ‚ΠΎΠ΄Π° обСртывания, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰Π΅Π³ΠΎ Consumer, Ρƒ вас ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ. Π­Ρ‚ΠΎ всСго лишь ΠΎΠ΄ΠΈΠ½ ΠΈΠ· способов ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Π² ΠΏΠΎΡ‚ΠΎΠΊΠ°Ρ…. Π― Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π΅Π»Π°ΡŽΡ‚ это Π·Π° вас. Π’Π°ΠΊΠΆΠ΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠΎΠ½Π°Π΄Ρƒ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ успСхов ΠΈΠ»ΠΈ Π½Π΅ΡƒΠ΄Π°Ρ‡, Π½ΠΎ это Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ Π·Π° Ρ€Π°ΠΌΠΊΠΈ этого поста.