java8实现:写一个大数据量出力到csv的共通方法,参数为List<ADto>、ADto.class、filePath,将list出力到csv文件中
时间: 2023-12-14 14:39:22 浏览: 32
可以使用Java 8的Stream API和CSV库来实现这个功能。以下是一个示例方法:
```java
import java.io.IOException;
import java.lang.reflect.Field;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;
import java.util.stream.Collectors;
import com.opencsv.CSVWriter;
public static void writeListToCsv(List<?> list, Class<?> type, String filePath) throws IOException {
// 获取类型的所有字段名
Field[] fields = type.getDeclaredFields();
String[] headers = new String[fields.length];
for (int i = 0; i < fields.length; i++) {
headers[i] = fields[i].getName();
}
// 将列表转换为字符串数组
List<String[]> data = list.stream()
.map(item -> {
String[] row = new String[fields.length];
for (int i = 0; i < fields.length; i++) {
try {
fields[i].setAccessible(true);
Object value = fields[i].get(item);
row[i] = value != null ? value.toString() : "";
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
return row;
})
.collect(Collectors.toList());
// 写入CSV文件
try (CSVWriter writer = new CSVWriter(Files.newBufferedWriter(Paths.get(filePath)))) {
writer.writeNext(headers);
writer.writeAll(data);
}
}
```
该方法首先使用反射获取传入的类型的所有字段名,然后将列表中的每个对象转换为一个字符串数组,其中每个元素对应对象的一个字段值。最后,使用CSV库将数组写入CSV文件中。