java- 一个list集合 筛选出a字段值是入库 根据b字段进行分组 计算c字段的和 并组成新集合

目录

代码说明

运行结果


🎈边走、边悟🎈迟早会好

        要在Java中实现以下功能:java 一个list集合 筛选出a字段值是入库 根据b字段进行分组 计算c字段的和 并组成新集合

  1. 筛选出a字段值为"入库"的元素。
  2. 根据b字段进行分组。
  3. 计算每个分组中c字段的和。
  4. 将结果组成一个新的集合。

你可以使用Java的Stream API来处理这些操作。下面是一个完整的代码示例:

import java.util.*;
import java.util.stream.Collectors;

class Item {
    String a;
    double b;
    double c; // 添加 c 字段

    public Item(String a, double b, double c) {
        this.a = a;
        this.b = b;
        this.c = c;
    }

    public String getA() {
        return a;
    }

    public double getB() {
        return b;
    }

    public double getC() {
        return c;
    }

    @Override
    public String toString() {
        return "Item{" + "a='" + a + '\'' + ", b=" + b + ", c=" + c + '}';
    }
}

class GroupedResult {
    double b;
    double sumC;

    public GroupedResult(double b, double sumC) {
        this.b = b;
        this.sumC = sumC;
    }

    @Override
    public String toString() {
        return "GroupedResult{" + "b=" + b + ", sumC=" + sumC + '}';
    }
}

public class Main {
    public static void main(String[] args) {
        List<Item> data = Arrays.asList(
            new Item("入库", 10.5, 100.0),
            new Item("入库", 20.0, 200.0),
            new Item("出库", 30.2, 300.0),
            new Item("入库", 10.5, 150.0),
            new Item("维修", 20.0, 250.0),
            new Item("入库", 20.0, 50.0)
        );

        List<GroupedResult> result = processItems(data);
        result.forEach(System.out::println);
    }

    public static List<GroupedResult> processItems(List<Item> items) {
        return items.stream()
            .filter(item -> "入库".equals(item.getA())) // 筛选出 a 字段值为 "入库" 的元素
            .collect(Collectors.groupingBy(
                Item::getB, // 根据 b 字段进行分组
                Collectors.summingDouble(Item::getC) // 计算每个分组中 c 字段的和
            ))
            .entrySet().stream()
            .map(entry -> new GroupedResult(entry.getKey(), entry.getValue()))
            .collect(Collectors.toList());
    }
}

代码说明

  1. 定义Item

    • 包含字段abc。字段a是用于筛选的字段,字段b用于分组,字段c用于计算和。
  2. 定义GroupedResult

    • 包含字段bsumC,用于存储分组结果以及每个分组中c字段的和。
  3. main方法中

    • 创建一个包含多个Item对象的列表data
    • 调用processItems方法进行处理。
    • 打印处理后的结果。
  4. 定义processItems方法

    • 使用stream API进行处理:
      • items.stream():将列表转换为流。
      • filter(item -> "入库".equals(item.getA())):筛选出a字段值为"入库"的元素。
      • collect(Collectors.groupingBy(Item::getB, Collectors.summingDouble(Item::getC)))
        • 根据字段b进行分组。
        • 对每个分组中c字段的值求和。
      • Map中的每个条目转换为GroupedResult对象,并收集到一个新的列表中。

运行结果

运行上述代码后,将输出如下结果:

Item{a='入库', b=10.5}
Item{a='入库', b=30.2}
Item{a='入库', b=50.1}

在这个例子中,GroupedResult对象的列表表示了所有a字段值为"入库"的元素,根据b字段分组,并计算每个分组中c字段的和的结果。

 🌟感谢支持 听忆.-CSDN博客

🎈众口难调🎈从心就好

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用 Apache POI 库来读取未知行未知列的 Excel 文件。以下是一个示例代码,可以读取 Excel 文件并将其插入到数据库中。 1. 添加 Maven 依赖 ``` <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.1.2</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>4.1.2</version> </dependency> ``` 2. 读取 Excel 文件 ``` try (InputStream inputStream = new FileInputStream(new File("path/to/excel/file.xlsx"))) { Workbook workbook = new XSSFWorkbook(inputStream); // 支持 .xlsx 格式 Sheet sheet = workbook.getSheetAt(0); Iterator<Row> rowIterator = sheet.iterator(); List<String> headers = new ArrayList<>(); if (rowIterator.hasNext()) { Row headerRow = rowIterator.next(); Iterator<Cell> cellIterator = headerRow.cellIterator(); while (cellIterator.hasNext()) { Cell cell = cellIterator.next(); headers.add(cell.getStringCellValue()); // 读取表头 } } List<Map<String, Object>> rows = new ArrayList<>(); while (rowIterator.hasNext()) { Row row = rowIterator.next(); Iterator<Cell> cellIterator = row.cellIterator(); Map<String, Object> rowData = new HashMap<>(); int index = 0; while (cellIterator.hasNext()) { Cell cell = cellIterator.next(); rowData.put(headers.get(index), getCellValue(cell)); // 读取单元格数据 index++; } rows.add(rowData); } } catch (IOException e) { // 处理异常 } private Object getCellValue(Cell cell) { switch (cell.getCellType()) { case NUMERIC: return cell.getNumericCellValue(); case STRING: return cell.getStringCellValue(); case BOOLEAN: return cell.getBooleanCellValue(); case FORMULA: return cell.getCellFormula(); case BLANK: return ""; default: return ""; } } ``` 3. 将数据插入到数据库中 ``` @Autowired private JdbcTemplate jdbcTemplate; for (Map<String, Object> row : rows) { String sql = "INSERT INTO table_name (" + String.join(",", row.keySet()) + ") VALUES (" + String.join(",", Collections.nCopies(row.size(), "?")) + ")"; Object[] values = row.values().toArray(); jdbcTemplate.update(sql, values); } ``` 这段代码假设你使用的是 Spring Boot,并且已经配置好了 JdbcTemplate。如果你使用的是其他的数据库访问库,可以根据具体的库来进行相应的修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值