In dit artikel zullen we kijken naar de nieuwe Java 12-functie ‘switch expressions’ en hoe deze kan worden gebruikt in combinatie met de Stream::map-bewerking en enkele andere stream-bewerkingen. Ontdek hoe u uw code kunt verbeteren met streams en van expressie kunt wisselen.

Switch Expressions Java 12 wordt geleverd met “preview” -ondersteuning voor “switch-uitdrukkingen”. Switch-expressie maakt het mogelijk dat switchinstructies waarden direct retourneren, zoals hieronder weergegeven:

Als u deze methode met 1 aanroept, wordt “weekend category” weergegeven.

Dit is geweldig en maakt onze code korter en beknopter. We hoeven ons niet bezig te houden met fall-through-zorgen, blokkades, veranderlijke tijdelijke variabelen of gemiste gevallen / standaard die mogelijk het geval is voor de goede ‘switch’. Kijk maar eens naar dit overeenkomstige oude schakelvoorbeeld en je zult zien wat ik bedoel:

Hiermee wordt een stroom van alle 1000 films in de database gemaakt en vervolgens wordt elke film toegewezen aan een corresponderende taalnaam en worden al die namen verzameld in een lijst. Als u dit voorbeeld uitvoert, wordt de volgende uitvoer geproduceerd (verkort vanwege de beknoptheid):

[the English language, the English language, … ]

Als we de syntaxis van de oude switch zouden hebben gebruikt, hadden we zoiets gekregen:

Of misschien iets als dit:

Het laatste voorbeeld is korter maar dupliceert logica.

 

Switch Expressions in Stream::mapToInt

In dit voorbeeld zullen we samenvattende statistieken berekenen over scores die we toewijzen op basis van de beoordeling van een film. Hoe beperkter de hogere score volgens onze eigen verzonnen schaal:

Dit levert de volgende uitvoer op:

In dit geval is het verschil tussen de switch-expressies en de oude switch niet zo groot. Met behulp van de oude schakelaar zouden we dit kunnen hebben geschreven:

 

Switch Expressions in Stream::collect

This last example shows the use of a switch expression in a grouping by Collector. In this case, we would like to count how many films that can be seen by a person of a certain minimum age. Here, we are using a Map with the minimum age as keys and counted films as values.

Dit levert de volgende uitvoer op:

Door de (optionele) groepering via kaartleverancier TreeMap::new aan te bieden, krijgen we onze leeftijden in gesorteerde volgorde. Waarom PG-13 vanaf 13 jaar kan worden gezien, maar NC-17 kan niet vanaf 17 worden gezien, maar vanaf 18 jaar is heel mysterieus maar buiten het bestek van dit artikel.

 

Samenvatting

Wij kijken uit naar de Switch Expressions functie die officieel is opgenomen in Java. Switch Expressions kunnen ‘lambdas en method references’ soms vervangen voor veel Stream operatie types.