MST

星途 面试题库

面试题:Java中Stream limit方法的边界控制应用场景

请举例说明在实际项目开发中,哪些场景下会使用到Java Stream的limit方法进行边界控制,并且写出对应的代码示例。
43.2万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试
  1. 场景一:分页查询场景
    • 在数据库查询后返回的结果集可能很大,我们需要将其分页展示给用户。例如,在一个博客系统中,查询文章列表时,只返回第一页的10篇文章。
    • 代码示例:
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

class Article {
    private String title;
    public Article(String title) {
        this.title = title;
    }
    public String getTitle() {
        return title;
    }
}

public class StreamLimitExample {
    public static void main(String[] args) {
        List<Article> articleList = new ArrayList<>();
        articleList.add(new Article("Article 1"));
        articleList.add(new Article("Article 2"));
        articleList.add(new Article("Article 3"));
        articleList.add(new Article("Article 4"));
        articleList.add(new Article("Article 5"));
        articleList.add(new Article("Article 6"));
        articleList.add(new Article("Article 7"));
        articleList.add(new Article("Article 8"));
        articleList.add(new Article("Article 9"));
        articleList.add(new Article("Article 10"));
        articleList.add(new Article("Article 11"));

        List<Article> firstPageArticles = articleList.stream()
              .limit(10)
              .collect(Collectors.toList());

        firstPageArticles.forEach(article -> System.out.println(article.getTitle()));
    }
}
  1. 场景二:处理大量数据时取前N个符合条件的数据
    • 比如在一个销售数据系统中,要找出销售额最高的前5个产品,以便重点分析。
    • 代码示例:
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;

class Product {
    private String name;
    private double sales;
    public Product(String name, double sales) {
        this.name = name;
        this.sales = sales;
    }
    public String getName() {
        return name;
    }
    public double getSales() {
        return sales;
    }
}

public class StreamLimitTopSalesExample {
    public static void main(String[] args) {
        List<Product> productList = new ArrayList<>();
        productList.add(new Product("Product A", 1000.0));
        productList.add(new Product("Product B", 1500.0));
        productList.add(new Product("Product C", 800.0));
        productList.add(new Product("Product D", 2000.0));
        productList.add(new Product("Product E", 1200.0));
        productList.add(new Product("Product F", 900.0));

        List<Product> top5Products = productList.stream()
              .sorted(Comparator.comparingDouble(Product::getSales).reversed())
              .limit(5)
              .collect(Collectors.toList());

        top5Products.forEach(product -> System.out.println(product.getName() + " - " + product.getSales()));
    }
}