Metodereferanse i Java
Før vi går videre til praksis med Stream API, bør vi utforske noen snarveier for lambda-uttrykk. Programmerere omtaler disse "snarveiene" som syntaktisk sukker.
I dette kapittelet skal vi diskutere metodereferanser og hvordan de kan brukes som erstatninger for lambda-uttrykk.
Metodereferanser
La oss se på et enkelt eksempel på et lambda-uttrykk og forsøke å erstatte det med en metodereferanse:
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)); } }
Bruk av to lambda-uttrykk fremstår ikke særlig elegant, spesielt når de kan forkortes til metodereferanser fra klassene der de er deklarert.
Syntaksen vil se slik ut:
Example.java
1(Class::Method)
La oss forbedre koden ovenfor ved å bruke metodereferanser:
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); } }
Metoden toUpperCase er en del av String-klassen, så vi bruker konstruksjonen String::toUpperCase. Merk at når du bruker en metodereferanse, vil operasjonen bli brukt på hvert element, så det er ikke nødvendig å bruke et lambda-uttrykk for dette. Vi har også erstattet utskrift til skjerm med System.out::print, som også er en metodereferanse. Programmet vil bruke metoden System.out.print() på hvert element.
For øvrig foreslår IntelliJ IDEA ofte å erstatte lambda-uttrykk med metodereferanser dersom det er mulig, så du trenger ikke å huske syntaksen hver gang.
På denne måten vil IntelliJ IDEA selv foreslå forbedringer av koden din ved bruk av metodereferanser.
Oppsummering
Oppsummert medfører ikke metodereferanser noen programmeringsmessig byrde. De optimaliserer ikke prosessen, men gjør den heller ikke mer komplisert. Denne konstruksjonen er kun for å redusere mengden skrevet kode noe og forbedre lesbarheten. Om du velger å bruke lambda-uttrykk eller metodereferanser er opp til deg. For eksempel synes jeg det er tydeligere å skrive et lambda-uttrykk, og deretter vil IntelliJ automatisk erstatte det med en metodereferanse.
Takk for tilbakemeldingene dine!
Spør AI
Spør AI
Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår
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?
Fantastisk!
Completion rate forbedret til 4
Metodereferanse i Java
Sveip for å vise menyen
Før vi går videre til praksis med Stream API, bør vi utforske noen snarveier for lambda-uttrykk. Programmerere omtaler disse "snarveiene" som syntaktisk sukker.
I dette kapittelet skal vi diskutere metodereferanser og hvordan de kan brukes som erstatninger for lambda-uttrykk.
Metodereferanser
La oss se på et enkelt eksempel på et lambda-uttrykk og forsøke å erstatte det med en metodereferanse:
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)); } }
Bruk av to lambda-uttrykk fremstår ikke særlig elegant, spesielt når de kan forkortes til metodereferanser fra klassene der de er deklarert.
Syntaksen vil se slik ut:
Example.java
1(Class::Method)
La oss forbedre koden ovenfor ved å bruke metodereferanser:
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); } }
Metoden toUpperCase er en del av String-klassen, så vi bruker konstruksjonen String::toUpperCase. Merk at når du bruker en metodereferanse, vil operasjonen bli brukt på hvert element, så det er ikke nødvendig å bruke et lambda-uttrykk for dette. Vi har også erstattet utskrift til skjerm med System.out::print, som også er en metodereferanse. Programmet vil bruke metoden System.out.print() på hvert element.
For øvrig foreslår IntelliJ IDEA ofte å erstatte lambda-uttrykk med metodereferanser dersom det er mulig, så du trenger ikke å huske syntaksen hver gang.
På denne måten vil IntelliJ IDEA selv foreslå forbedringer av koden din ved bruk av metodereferanser.
Oppsummering
Oppsummert medfører ikke metodereferanser noen programmeringsmessig byrde. De optimaliserer ikke prosessen, men gjør den heller ikke mer komplisert. Denne konstruksjonen er kun for å redusere mengden skrevet kode noe og forbedre lesbarheten. Om du velger å bruke lambda-uttrykk eller metodereferanser er opp til deg. For eksempel synes jeg det er tydeligere å skrive et lambda-uttrykk, og deretter vil IntelliJ automatisk erstatte det med en metodereferanse.
Takk for tilbakemeldingene dine!