Hoe het laatste element van een stream in Java te krijgen?

1. Overzicht

De Java Stroom API was het belangrijkste kenmerk van de Java 8-release. Streams vertegenwoordigen lui geëvalueerde reeksen objecten en bieden een rijke, vloeiende en monadische API.

In dit artikel zullen we snel kijken naar manieren om het laatste element van een Stroom. Houd daar rekening mee vanwege de aard van beken is het geen natuurlijke operatie. Zorg er altijd voor dat u niet met oneindig werkt Streams.

2. Gebruik de Verminderen API

Verminderen, simpel gezegd, vermindert de verzameling elementen in een Stroom naar een enkel element.

In dit geval verkleinen we de set elementen om het laatste element in de Stroom. Houd daar rekening mee deze methode retourneert alleen deterministische resultaten voor sequentieel Streams.

Laten we een Lijst van Draad waarden, verkrijg de Stroom van de Lijst en vervolgens verminderen:

List valueList = nieuwe ArrayList (); valueList.add ("Joe"); valueList.add ("John"); valueList.add ("Sean"); Stroom stream = valueList.stream (); stream.reduce ((eerste, tweede) -> tweede) .orElse (null); 

Hier wordt de stroom teruggebracht tot een niveau waarop alleen het laatste element overblijft. Als de stream leeg is, retourneert deze een nul waarde.

2. Gebruik van de Skip-functie

De andere manier om het laatste element van de stream te krijgen, is door alle elementen ervoor over te slaan. Dit kan worden bereikt met Overspringen functie van Stroom klasse. Houd er rekening mee dat we in dit geval de Stroom twee keer dus er is een duidelijke invloed op de prestaties.

Laten we een Lijst van string-waarden en gebruik zijn grootte functie om te bepalen hoeveel elementen moeten worden overgeslagen om het laatste element te bereiken.

Hier is de voorbeeldcode waarbij het laatste element wordt gebruikt overspringen:

List valueList = nieuwe ArrayList (); valueList.add ("Joe"); valueList.add ("John"); valueList.add ("Sean"); lange telling = valueList.stream (). count (); Stroom stream = valueList.stream (); stream.skip (count - 1) .findFirst (). get (); 

"Sean" wordt uiteindelijk het laatste element.

4. Het laatste element van een oneindige stroom verkrijgen

Proberen om het laatste element van de oneindige stroom te krijgen, zou leiden tot een oneindige reeks evaluaties die op oneindige elementen worden uitgevoerd. Beide overspringen en verminderen komt niet terug van de uitvoering van de evaluatie, tenzij we de oneindige stroom beperken tot een specifiek aantal elementen met behulp van limiet operatie.

Hier is de voorbeeldcode waarin we een oneindige stroom namen en probeerden het laatste element te krijgen:

Stream stream = Stream.iterate (0, i -> i + 1); stream.reduce ((eerste, tweede) -> tweede) .orElse (null);

Bijgevolg komt de stream niet terug uit de evaluatie en komt hij terecht het stoppen van de uitvoering van het programma.

5. Conclusie

We hebben verschillende manieren gezien om het laatste element van een Stroom beide gebruiken verminderen en Overspringen API's. Ook hebben we gekeken waarom dit bij oneindige stromen niet mogelijk is.

We hebben gezien dat het laatste element uit een Stroom is niet eenvoudig in vergelijking met het ophalen uit andere datastructuren. Dit komt door de luie aard van Streams die niet worden geëvalueerd tenzij de terminalfunctie wordt aangeroepen en we weten nooit of het momenteel geëvalueerde element het laatste is.

Codefragmenten zijn te vinden op GitHub.


$config[zx-auto] not found$config[zx-overlay] not found