Metodreferens i Java
Innan vi går vidare till praktiska övningar med Stream API, bör vi utforska några genvägar för lambda-uttryck. Programmerare kallar dessa "genvägar" för syntaktiskt socker.
I detta kapitel kommer vi att diskutera metodreferenser och hur de kan användas som ersättare för lambda-uttryck.
Metodreferenser
Låt oss titta på ett enkelt exempel på ett lambda-uttryck och försöka ersätta det med en metodreferens:
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)); } }
Att använda två lambda-uttryck ser inte särskilt elegant ut, särskilt när du kan förkorta dem till metodreferenser från de klasser där de är deklarerade.
Syntaxen kommer att se ut så här:
Example.java
1(Class::Method)
Låt oss förbättra ovanstående kod med hjälp av metodreferenser:
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-metoden är en del av String-klassen, så vi använder konstruktionen String::toUpperCase. Observera att när du använder en metodreferens kommer operationen att tillämpas på varje element, så det finns inget behov av att använda ett lambda-uttryck för detta. Vi har även ersatt utskriften till skärmen med System.out::print, vilket också är en metodreferens. Programmet kommer att tillämpa metoden System.out.print() på varje element.
För övrigt föreslår IntelliJ IDEA ofta att ersätta lambda-uttryck med metodreferenser om en sådan operation är möjlig, så du behöver inte memorera syntaxen varje gång.
På detta sätt kommer IntelliJ IDEA själv att föreslå förbättringar av din kod genom att använda metodreferenser.
Sammanfattning
Sammanfattningsvis tillför metodreferenser ingen programmatisk belastning. De optimerar inte processen men gör den inte heller mer komplicerad. Denna konstruktion är helt enkelt för att minska mängden skriven kod något och förbättra läsbarheten. Om du vill använda lambda-uttryck eller metodreferenser är upp till dig. Till exempel tycker jag att det är tydligare att skriva ett lambda-uttryck, och sedan kommer IntelliJ automatiskt att ersätta det med en metodreferens.
Tack för dina kommentarer!
Fråga AI
Fråga AI
Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal
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?
Fantastiskt!
Completion betyg förbättrat till 4
Metodreferens i Java
Svep för att visa menyn
Innan vi går vidare till praktiska övningar med Stream API, bör vi utforska några genvägar för lambda-uttryck. Programmerare kallar dessa "genvägar" för syntaktiskt socker.
I detta kapitel kommer vi att diskutera metodreferenser och hur de kan användas som ersättare för lambda-uttryck.
Metodreferenser
Låt oss titta på ett enkelt exempel på ett lambda-uttryck och försöka ersätta det med en metodreferens:
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)); } }
Att använda två lambda-uttryck ser inte särskilt elegant ut, särskilt när du kan förkorta dem till metodreferenser från de klasser där de är deklarerade.
Syntaxen kommer att se ut så här:
Example.java
1(Class::Method)
Låt oss förbättra ovanstående kod med hjälp av metodreferenser:
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-metoden är en del av String-klassen, så vi använder konstruktionen String::toUpperCase. Observera att när du använder en metodreferens kommer operationen att tillämpas på varje element, så det finns inget behov av att använda ett lambda-uttryck för detta. Vi har även ersatt utskriften till skärmen med System.out::print, vilket också är en metodreferens. Programmet kommer att tillämpa metoden System.out.print() på varje element.
För övrigt föreslår IntelliJ IDEA ofta att ersätta lambda-uttryck med metodreferenser om en sådan operation är möjlig, så du behöver inte memorera syntaxen varje gång.
På detta sätt kommer IntelliJ IDEA själv att föreslå förbättringar av din kod genom att använda metodreferenser.
Sammanfattning
Sammanfattningsvis tillför metodreferenser ingen programmatisk belastning. De optimerar inte processen men gör den inte heller mer komplicerad. Denna konstruktion är helt enkelt för att minska mängden skriven kod något och förbättra läsbarheten. Om du vill använda lambda-uttryck eller metodreferenser är upp till dig. Till exempel tycker jag att det är tydligare att skriva ett lambda-uttryck, och sedan kommer IntelliJ automatiskt att ersätta det med en metodreferens.
Tack för dina kommentarer!