In this post we’ll see how to get range of items from any collection using Java Stream API.
For example I have a list of Products and I want another list of products as per following criteria-
1- List of products that fall with in a passed price range.
Product classpublic class Product { private String productName; private double price; Product(String productName, double price){ this.productName = productName; this.price = price; } public String getProductName() { return productName; } public void setProductName(String productName) { this.productName = productName; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } @Override public String toString() { return getProductName() + " " + getPrice(); } }
Here the problem statement is to write a method that is passed minimum price and maximum price as arguments and it should return a list of products that fall with in that price range and this logic should be written using Java Stream API.
import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public class StreamRange { public static void main(String[] args) { StreamRange obj = new StreamRange(); // Get a list of products List<Product> productList = obj.createList(); obj.productsInPriceRange(productList, 3000, 50000); } // create list of Products private List<Product> createList(){ List<Product> productList = Arrays.asList(new Product("Screw Driver", 250), new Product("Trousers", 3000), new Product("RAM", 2200.56), new Product("Smart Watch", 8000), new Product("Laptop", 48000)); return productList; } void productsInPriceRange(List<Product> productList, double fromPrice, double toPrice) { // sorting is done here so that result comes in price order, not actually needed for the logic List<Product> newList = productList.stream() .sorted((Product a, Product b) -> Double.valueOf(a.getPrice()) .compareTo(Double.valueOf(b.getPrice()))) .filter(p -> (p.getPrice() >= fromPrice && p.getPrice() <= toPrice)) .collect(Collectors.toList()); System.out.println(newList); } }Output
[Trousers 3000.0, Smart Watch 8000.0, Laptop 48000.0]
2. From the list of Products you want the top 3 priced products using Java Stream API.
void topNPricedProducts(List<Product> productList, int range) { // sorting is done in descending order here List<Product> newList = productList.stream() .sorted((Product a, Product b) -> Double.valueOf(b.getPrice()) .compareTo(Double.valueOf(a.getPrice()))) .limit(range) .collect(Collectors.toList()); System.out.println(newList); }
3. From the list of Products you want the bottom 3 priced products.
void bottomNPricedProducts(List<Product> productList, int range) { // ascending order sorting List<Product> newList = productList.stream() .sorted((Product a, Product b) -> Double.valueOf(a.getPrice()) .compareTo(Double.valueOf(b.getPrice()))) .limit(range) .collect(Collectors.toList()); System.out.println(newList); }
4. From the list you want a sub-list of products as per given from and to arguments.
void productSubList(List<Product> productList, int from, int to) { List<Product> newList = productList.stream() .skip(from) .limit(to) .collect(Collectors.toList()); System.out.println(newList); }
That's all for the topic Get Range of Items Using Java Stream API. If something is missing or you have something to share about the topic please write a comment.
You may also like
- flatMap() in Java Stream
- Java Stream skip() Method With Examples
- ZonedDateTime in Java With Examples
- Java String - substring() Method Example
- Write to Excel File in Java Using Apache POI
- Spring IoC Container Types – ApplicationContext and BeanFactory
- Spring Boot Microservices Eureka + Ribbon
- fnmatch Module in Python - File Name Pattern Matching