java读取csv文件,判断是否有重复的记录

需求描述: 从FTP上下载csv文件.读取csv文件内容写入到数据库中.
要求: 判断csv文件是否有重复的记录
实现方案: 读取文件内容, 转换为List<Map<String, Object>>.判断List中的Map是否存在相同的对象.
代码实现:利用Java的stream API 数据分组

/**
* 自定义分组key的规则,是拼接某几个参数(这里拼接的是map中的所有元素)
* 这里和sql语句中group by 语句一样的思想.
*/
private String getGroupKey(Map<String, Object> map) {
        String groupKey = "";
        for (Map.Entry entry : map.entrySet()) {
            groupKey += entry.getValue();
        }
        return groupKey;
    }

/**
* 方法1: 判断分组结果, 如果大于1说明存在重复记录
*/
Map<String, List<Map<String, Object>>> repeatRecord = result.stream().collect(Collectors.groupingBy(this::getGroupKey));
        for (List<Map<String, Object>> entry : repeatRecord.values()) {
            if (entry.size() > 1) {
                return true;
            }
        }
/**
* 方法2(推荐): 更简单, 一行代码实现, 直接调用Stream API
*/
Map<String, Long> collect = result.stream().collect(Collectors.groupingBy(this::getGroupKey, counting()));
for (Long n : collect.values()) {
   if (n > 1) {
        return true;
    }
}

Stream 很强大呀, 需要不断深入学习.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java可以使用CSV文件读取库来读取CSV文件,其中常用的库包括OpenCSV和Apache Commons CSV。 1. 使用OpenCSV OpenCSV是一个流行的CSV文件读取库,它可以从文件读取CSV数据并将其转换为Java对象。以下是使用OpenCSV读取CSV文件的示例代码: ```java import com.opencsv.CSVReader; import java.io.FileReader; import java.io.IOException; public class CSVReaderExample { public static void main(String[] args) throws IOException { CSVReader reader = new CSVReader(new FileReader("data.csv")); String[] line; while ((line = reader.readNext()) != null) { for (String value : line) { System.out.print(value + " "); } System.out.println(); } reader.close(); } } ``` 在上面的代码中,我们创建了一个CSVReader实例并将其与CSV文件连接。然后,我们使用readNext()方法逐行读取CSV文件,并将每行的值存储在一个String数组中。最后,我们遍历String数组并输出每个值。 2. 使用Apache Commons CSV Apache Commons CSV是另一个流行的CSV文件读取库。以下是使用Apache Commons CSV读取CSV文件的示例代码: ```java import org.apache.commons.csv.CSVFormat; import org.apache.commons.csv.CSVParser; import org.apache.commons.csv.CSVRecord; import java.io.FileReader; import java.io.IOException; public class CSVReaderExample { public static void main(String[] args) throws IOException { CSVFormat format = CSVFormat.DEFAULT.withHeader().withDelimiter(','); CSVParser parser = new CSVParser(new FileReader("data.csv"), format); for (CSVRecord record : parser) { String name = record.get("Name"); int age = Integer.parseInt(record.get("Age")); String email = record.get("Email"); System.out.println(name + ", " + age + ", " + email); } parser.close(); } } ``` 在上面的代码中,我们使用CSVFormat类定义CSV文件的格式。然后,我们创建了一个CSVParser实例并将其与CSV文件连接。使用CSVRecord类,我们可以逐行读取CSV文件并将其转换为Java对象。在本例中,我们使用get()方法访问每个字段的值,并将其转换为相应的Java数据类型。最后,我们输出每个记录的值。 这些是使用Java读取CSV文件的两种常见方法。你可以选择你喜欢的方法,根据需要进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值