Metodiviittaus Javassa
Ennen kuin siirrytään käytännön harjoituksiin Stream API:n kanssa, kannattaa tutustua lambda-lausekkeiden oikoteihin. Ohjelmoijat kutsuvat näitä "oikoteitä" nimellä syntaktinen sokeri.
Tässä luvussa käsitellään metodiviittauksia ja niiden käyttöä lambda-lausekkeiden korvaajina.
Metodiviittaukset
Tarkastellaan yksinkertaista esimerkkiä lambda-lausekkeesta ja yritetään korvata se metodiviittauksella:
Main.java
1234567891011package com.example; import java.util.Arrays; import java.util.List; public class Main { public static void main(String[] args) { List<String> example = Arrays.asList("c", "o", "d", "e", "f", "i", "n", "i", "t", "y"); example.stream().map(e -> e.toUpperCase()).forEach(e -> System.out.print(e)); } }
Kahden lambda-lausekkeen käyttäminen ei näytä kovin elegantilta, erityisesti kun ne voidaan lyhentää metodiviittauksiksi niistä luokista, joissa ne on määritelty.
Syntaksi näyttää tältä:
Example.java
1(Class::Method)
Parannetaan yllä olevaa koodia käyttämällä metodiviittauksia:
Main.java
1234567891011package com.example; import java.util.Arrays; import java.util.List; public class Main { public static void main(String[] args) { List<String> example = Arrays.asList("c", "o", "d", "e", "f", "i", "n", "i", "t", "y"); example.stream().map(String::toUpperCase).forEach(System.out::print); } }
toUpperCase-metodi kuuluu String-luokkaan, joten käytämme rakennetta String::toUpperCase. Huomaa, että metodiviittausta käytettäessä operaatio suoritetaan jokaiselle alkiolle, joten lambda-lauseketta ei tarvitse käyttää tässä. Korvasimme myös näytölle tulostamisen metodiviittauksella System.out::print. Ohjelma käyttää System.out.print()-metodia jokaiselle alkiolle.
Muuten, IntelliJ IDEA ehdottaa usein itse lambda-lausekkeiden korvaamista metodiviittauksilla, jos se on mahdollista, joten syntaksia ei tarvitse muistaa ulkoa joka kerta.
Tällä tavoin IntelliJ IDEA ehdottaa itse koodisi parantamista käyttämällä metodiviittauksia.
Yhteenveto
Yhteenvetona metodiviittaukset eivät lisää ohjelmallista taakkaa. Ne eivät optimoi prosessia, mutta eivät myöskään monimutkaista sitä. Tämä rakenne on tarkoitettu kirjoitetun koodin vähentämiseen ja luettavuuden parantamiseen. Lambda-lausekkeiden tai metodiviittausten käyttö on sinun päätettävissäsi. Esimerkiksi itse koen selkeämmäksi kirjoittaa lambda-lausekkeen, ja tämän jälkeen IntelliJ korvaa sen automaattisesti metodiviittauksella.
Kiitos palautteestasi!
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme
Can you show more examples of method references?
What are the different types of method references in Java?
When should I use a method reference instead of a lambda expression?
Mahtavaa!
Completion arvosana parantunut arvoon 4
Metodiviittaus Javassa
Pyyhkäise näyttääksesi valikon
Ennen kuin siirrytään käytännön harjoituksiin Stream API:n kanssa, kannattaa tutustua lambda-lausekkeiden oikoteihin. Ohjelmoijat kutsuvat näitä "oikoteitä" nimellä syntaktinen sokeri.
Tässä luvussa käsitellään metodiviittauksia ja niiden käyttöä lambda-lausekkeiden korvaajina.
Metodiviittaukset
Tarkastellaan yksinkertaista esimerkkiä lambda-lausekkeesta ja yritetään korvata se metodiviittauksella:
Main.java
1234567891011package com.example; import java.util.Arrays; import java.util.List; public class Main { public static void main(String[] args) { List<String> example = Arrays.asList("c", "o", "d", "e", "f", "i", "n", "i", "t", "y"); example.stream().map(e -> e.toUpperCase()).forEach(e -> System.out.print(e)); } }
Kahden lambda-lausekkeen käyttäminen ei näytä kovin elegantilta, erityisesti kun ne voidaan lyhentää metodiviittauksiksi niistä luokista, joissa ne on määritelty.
Syntaksi näyttää tältä:
Example.java
1(Class::Method)
Parannetaan yllä olevaa koodia käyttämällä metodiviittauksia:
Main.java
1234567891011package com.example; import java.util.Arrays; import java.util.List; public class Main { public static void main(String[] args) { List<String> example = Arrays.asList("c", "o", "d", "e", "f", "i", "n", "i", "t", "y"); example.stream().map(String::toUpperCase).forEach(System.out::print); } }
toUpperCase-metodi kuuluu String-luokkaan, joten käytämme rakennetta String::toUpperCase. Huomaa, että metodiviittausta käytettäessä operaatio suoritetaan jokaiselle alkiolle, joten lambda-lauseketta ei tarvitse käyttää tässä. Korvasimme myös näytölle tulostamisen metodiviittauksella System.out::print. Ohjelma käyttää System.out.print()-metodia jokaiselle alkiolle.
Muuten, IntelliJ IDEA ehdottaa usein itse lambda-lausekkeiden korvaamista metodiviittauksilla, jos se on mahdollista, joten syntaksia ei tarvitse muistaa ulkoa joka kerta.
Tällä tavoin IntelliJ IDEA ehdottaa itse koodisi parantamista käyttämällä metodiviittauksia.
Yhteenveto
Yhteenvetona metodiviittaukset eivät lisää ohjelmallista taakkaa. Ne eivät optimoi prosessia, mutta eivät myöskään monimutkaista sitä. Tämä rakenne on tarkoitettu kirjoitetun koodin vähentämiseen ja luettavuuden parantamiseen. Lambda-lausekkeiden tai metodiviittausten käyttö on sinun päätettävissäsi. Esimerkiksi itse koen selkeämmäksi kirjoittaa lambda-lausekkeen, ja tämän jälkeen IntelliJ korvaa sen automaattisesti metodiviittauksella.
Kiitos palautteestasi!