Elementen Ophalen uit een Stream met findFirst() en findAny()
Veeg om het menu te tonen
In de Stream API kun je ook één overeenkomend element uit de gehele stream halen.
Bijvoorbeeld, in een online winkel kun je zoeken naar het eerste afgeprijsde product of een willekeurig artikel op voorraad. In dergelijke gevallen zijn de methoden findFirst en findAny nuttig omdat ze het mogelijk maken om snel een element uit een datastroom te halen.
De findFirst()-methode
De findFirst()-methode wordt gebruikt om het eerste element in een stream op te halen. Dit is vooral nuttig wanneer de volgorde van elementen van belang is, bijvoorbeeld bij het werken met een geordende stream.
Optional<T> findFirst();
Deze methode retourneert een Optional<T>, wat betekent dat het element mogelijk wel of niet gevonden wordt.
Voorbeeldgebruik
In een webwinkel is het nodig om het eerste afgeprijsde product te vinden en de naam ervan af te drukken:
Main.java
12345678910111213141516171819202122232425262728293031323334353637383940package com.example; import java.util.List; import java.util.Optional; import java.util.Arrays; public class Main { public static void main(String[] args) { List<Product> products = Arrays.asList( new Product("Laptop", false), new Product("Smartphone", true), new Product("Tablet", true) ); Optional<Product> discountedProduct = products.parallelStream() .filter(Product::hasDiscount) .findFirst(); discountedProduct.ifPresent(product -> System.out.println("Discounted product: " + product.getName())); } } class Product { private String name; private boolean discount; public Product(String name, boolean discount) { this.name = name; this.discount = discount; } public boolean hasDiscount() { return discount; } public String getName() { return name; } }
De code maakt een lijst van Product-objecten aan, elk met een discount-veld. De methode filter(Product::hasDiscount) selecteert alleen producten met korting, en findFirst() haalt het eerste op. Als er een product wordt gevonden, wordt de naam ervan afgedrukt.
De findAny()-methode
De findAny()-methode haalt een willekeurig element uit een stream. Deze methode is vooral nuttig bij parallelle verwerking, omdat het het eerste beschikbare element kan retourneren, wat in sommige gevallen sneller is dan findFirst().
Optional<T> findAny();
Net als findFirst() retourneert deze methode een Optional<T>, waarmee problemen met null worden voorkomen.
Voorbeeldgebruik
Hier wordt een willekeurig beschikbaar product gezocht en de naam ervan afgedrukt:
Main.java
123456789101112131415161718192021222324252627282930313233343536373839404142package com.example; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Optional; import java.util.stream.Stream; public class Main { public static void main(String[] args) { List<Product> products = Arrays.asList( new Product("Laptop", false), new Product("Smartphone", true), new Product("Tablet", true) ); Optional<Product> availableProduct = products.parallelStream() .filter(Product::hasDiscount) .findAny(); availableProduct.ifPresent(product -> System.out.println("Product found: " + product.getName())); } } class Product { private String name; private boolean discount; public Product(String name, boolean discount) { this.name = name; this.discount = discount; } public boolean hasDiscount() { return discount; } public String getName() { return name; } }
Deze code maakt een products lijst aan met Product objecten die een discount veld bevatten. De methode filter(Product::hasDiscount) filtert alleen de producten met korting eruit, en findAny() selecteert er willekeurig één. Als er een product wordt gevonden, wordt de naam ervan afgedrukt.
1. Wat retourneert de methode findFirst() in de Stream API?
2. Wat is het belangrijkste verschil tussen findAny() en findFirst()?
3. Welke methode biedt betere prestaties bij parallelle streams?
Bedankt voor je feedback!
Vraag AI
Vraag AI
Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.