JavaRush /Java Blog /Random-TL /Coffee break #73. Paano Pahusayin ang Iyong Java Code gam...

Coffee break #73. Paano Pahusayin ang Iyong Java Code gamit ang Mga Stream. Limang Pinakamahusay na IntelliJ IDEA Plugin para sa Mga Developer ng Java

Nai-publish sa grupo

Paano Pahusayin ang Iyong Java Code gamit ang Mga Stream

Pinagmulan: Dev.toCoffee break #73.  Pahusayin ang iyong Java code gamit ang Streams.  Limang Pinakamahusay na IntelliJ IDEA Plugin para sa Mga Nag-develop ng Java - 1

Ano ang Streams?

Ang mga stream ay unang lumitaw sa Java 8. Ayon sa dokumentasyon ng Oracle, ang mga ito ay mga klase para sa pagsuporta sa functional-style na mga operasyon sa mga stream ng mga elemento, tulad ng mapa-reduce transformations sa mga koleksyon. Sa simpleng mga termino, ang isang stream ay binubuo ng isang data source, na sinusundan ng zero o higit pang mga intermediate na operasyon, at pagkatapos ay isang terminal operation.

Ano ang data source?

  • Mga Koleksyon, Listahan, Set, ints, longs, doubles, arrays, file lines.

Ano ang mga intermediate operations?

  • Salain, mapa, pag-uri-uriin, atbp.
  • Ang mga operasyong ito ay nagbabalik ng isang Stream upang sila ay mai-chain sa iba pang mga operasyon.

Ano ang mga operasyon ng terminal?

  • ForEach, kolektahin, bawasan, findFirst, atbp.
  • Nagbabalik sila ng di-wasto o hindi stream na resulta.
  • Kung walang terminal operation ang isang thread, hindi tatawagin ang mga intermediate.

I-convert natin ang isang function mula sa imperative tungo sa declarative style gamit ang Streams

Imperative function (Walang Stream):

private int getResult_imperative(List<String> strings) {
    int result = 0;
    for (String string : strings){
        if(isDigit(string.charAt(0))) continue;
        if (string.contains("_")) continue;
        result += string.length();
    }
    return result;
}
Dito natin napapansin na kailangan nating gawin nang manu-mano ang ilang bagay:
  • Magdeklara ng variable ng resulta upang masubaybayan ang resulta.
  • I-loop ang Strings.
  • Sumulat ng dalawa kung pahayag (na maaaring maging mas kumplikado kaysa sa kasong ito).
  • Idagdag ang haba ng bawat isa sa resulta.

Suriin natin ang istilong deklaratibo (Mga Stream):

private int getResult_Declarative(List<String> strings){
    return strings.
            stream().
            filter(s -> !isDigit(s.charAt(0))).
            filter(s -> !s.contains("_")).
            mapToInt(String::length).
            sum();
}
Kaya ano ang pagkakaiba?
  • Kumuha kami ng Stream object sa pamamagitan ng pagtawag sa stream() function .
  • (Intermediate operation) ginagamit namin ang filter function nang dalawang beses - sa bawat oras na tutukuyin namin ang isang kundisyon na dapat matugunan lamang ng mga elementong iyon na gusto naming ilipat sa susunod na yugto.
  • (Intermediate operation) imapa namin ang bawat String object sa isang int sa pamamagitan ng pagtawag sa length method (gamit ang method reference style).
  • (Terminal operation) sum lahat ng nakaraang int value .

Mga obserbasyon

Hindi ba tila mas simple ang pangalawang diskarte? Ipinahiwatig namin kung ano ang gusto namin, hindi kung paano namin gustong gawin ito . Ito ang diwa ng declarative programming at ang layunin ng Stream API sa mga modernong Java application.

Limang Pinakamahusay na IntelliJ IDEA Plugin para sa Mga Developer ng Java

Pinagmulan: Ang Mga Plugin ng GitHubCoffee break #73.  Pahusayin ang iyong Java code gamit ang Streams.  Limang Pinakamahusay na IntelliJ IDEA Plugin para sa Mga Developer ng Java - 2 ay maaaring maging lubhang kapaki-pakinabang sa maraming sitwasyon kapag regular na nagtatrabaho sa code. Ang mga ito ay may kakayahang palawakin ang pangunahing pag-andar, pagbibigay ng iba't ibang mga pagsasama, at pagsuporta sa automation ng maraming gawain. Narito ang pinakamahusay na mga plugin sa aking opinyon:

SonarLint

Binibigyang-daan ka ng SonarLint na ayusin ang mga error at kahinaan kapag nagsusulat ng code. Itinatampok nito ang mga problema sa coding sa real time, na nagbibigay sa developer ng malinaw na mga tagubilin kung paano ayusin ang mga ito, para maayos mo ang mga ito bago isagawa ang code. Ang plugin na ito ay kinakailangan dahil ito ay lubos na nagpapabuti sa coding.

Maven Helper

Sana ginagamit mo si Maven? Oo! Ang Maven Helper plugin ay nagbibigay ng:
  • isang simpleng paraan upang pag-aralan at alisin ang mga magkasalungat na dependency;
  • isang madaling paraan upang makahanap ng direkta o palipat na mga dependency;
  • mga hakbang upang patakbuhin/i-debug ang mga target ng maven para sa module na naglalaman ng kasalukuyang file, o sa root module;
  • aksyon upang buksan ang isang terminal sa kasalukuyang landas sa maven module;
  • mga aksyon upang patakbuhin/i-debug ang kasalukuyang test file. Kung ang maven-surefire-plugin ay na-configure upang laktawan o ibukod ang isang pagsubok, ang layuning "i-verify" ang gagamitin. Ang iba't ibang mga istilo ng pagsasaayos ay matatagpuan sa GitHub .

CodeMetrics

Ang plugin na ito ay may mga tagapagpahiwatig ng tab batay sa mga custom na kalkulasyon ng kahirapan para sa mga Java file. Nagbibigay sila ng mga pahiwatig ng developer sa mga klase at pamamaraan upang madali niyang matukoy kung ano ang kailangang suriin. Bagama't hindi ito isang karaniwang sukatan, ito ay isang malapit na pagtatantya sa cyclomatic complexity . Maaari mo ring i-customize ang pagkalkula ng pagiging kumplikado para sa isang proyekto sa pamamagitan ng pagbabago ng naaangkop na mga entry sa configuration.

Pagmamanipula ng String

Paglipat ng kaso, pag-uuri, pag-filter, pag-zoom, pag-align ng column, pag-grepping, pag-escape, pag-encode at marami pang iba...

JPA Buddy

Ginagawang madali at mabilis ng JPA Buddy ang lahat ng bagay na nauugnay sa JPA. Nagbibigay ito ng mga tool upang matulungan kang magtrabaho sa Hibernate, Spring Data JPA, Liquibase, Flyway. Mga pangunahing tampok ng JPA Buddy:
  • JPA Entity: Gumawa at mag-edit ng mga entity, attribute ng entity, lifecycle callback, index, at mga hadlang. Suporta para sa mga JPA converter at mga custom na uri ng Hibernate. Kakayahang gumamit ng mga anotasyon ng Lombok para sa mga entity.
  • Lumikha ng mga tamang pagpapatupad ng equals, hashCode at toString na mga pamamaraan para sa mga entity ng JPA.
  • Mga layunin, pagsusuri, at mabilisang pag-aayos ng source code para sa mga deklarasyon ng entity ng JPA.
  • Ipakita ang graphical na ugnayan ng entity sa panel ng istruktura ng JPA sa ilalim ng node ng persistent units.
  • Awtomatikong pagbuo ng mga log ng pagbabago ng Liquibase at paglilipat ng bersyon ng Flyway: database-to-database, model-to-database, mga paghahambing ng model-to-snapshot.
  • Visual Liquibase changelog designer at tulong sa coding: paggawa at pag-edit ng mga item, pagtukoy sa mga pangalan ng talahanayan, pangalan ng column, kasamang mga file at higit pa.
  • Mga Aksyon: gumawa ng snapshot ng Liquibase, isagawa ang mga command na "Liquibase update" at "Liquibase updateSQL".
  • Spring Data Repositories: Paglikha ng mga repository, paglikha ng mga pamamaraan ng repository, pag-edit ng mga katangian ng pamamaraan, paggawa ng projection batay sa isang klase ng entity, pagkuha ng JPQL query.
  • Kotlin: Ganap na sinusuportahan ng lahat ng visual designer ang pagbuo ng code para sa mga bagay at repository ng Kotlin.
Sinabi ko ang tungkol sa nangungunang limang plugin, ngunit mayroon akong isa pa...

Mga Dagdag na Icon

Isa itong koleksyon ng icon na nagdaragdag ng mga shortcut sa mga file gaya ng Markdown, Yaml, Maven, Git at marami pa. Masasanay ka sa mga ito habang tinutulungan ka nilang makilala ang mga file nang madali. Tiyak na kakailanganin mo sila.
Mga komento
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION