如何用Java实现在 Reduce 函数中对商品的销量进行汇总,并按照销量从大到小排序...
时间: 2024-03-15 22:47:00 浏览: 64
可以使用Java 8中引入的Stream API来实现这个功能。具体实现步骤如下:
1. 首先将商品列表按照销量从大到小排序,可以使用`Comparator`接口配合`sorted`方法来实现:
```java
List<Product> products = ...; // 商品列表
List<Product> sortedProducts = products.stream()
.sorted(Comparator.comparingInt(Product::getSales).reversed())
.collect(Collectors.toList());
```
其中,`Product`类需要实现`getSales`方法来获取销量信息。
2. 然后使用`reduce`方法将销量进行汇总,可以使用`summingInt`方法来计算销量总和:
```java
int totalSales = sortedProducts.stream()
.mapToInt(Product::getSales)
.reduce(0, Integer::sum);
```
3. 最后将排序后的商品列表和销量总和进行返回即可:
```java
return new Summary(sortedProducts, totalSales);
```
其中,`Summary`类可自定义实现,用于封装排序后的商品列表和销量总和信息。
完整代码示例:
```java
public class SalesSummary {
public static Summary summarize(List<Product> products) {
List<Product> sortedProducts = products.stream()
.sorted(Comparator.comparingInt(Product::getSales).reversed())
.collect(Collectors.toList());
int totalSales = sortedProducts.stream()
.mapToInt(Product::getSales)
.reduce(0, Integer::sum);
return new Summary(sortedProducts, totalSales);
}
public static class Product {
private String name;
private int sales;
public Product(String name, int sales) {
this.name = name;
this.sales = sales;
}
public String getName() {
return name;
}
public int getSales() {
return sales;
}
}
public static class Summary {
private List<Product> products;
private int totalSales;
public Summary(List<Product> products, int totalSales) {
this.products = products;
this.totalSales = totalSales;
}
public List<Product> getProducts() {
return products;
}
public int getTotalSales() {
return totalSales;
}
}
public static void main(String[] args) {
List<Product> products = Arrays.asList(
new Product("A", 10),
new Product("B", 20),
new Product("C", 30)
);
Summary summary = summarize(products);
System.out.println("Sorted products: " + summary.getProducts());
System.out.println("Total sales: " + summary.getTotalSales());
}
}
```
阅读全文