java8实现:将List<ADto>出力成csv文件。参数为List<ADto>、ADto.class、filePath。要求提高性能
时间: 2024-05-12 12:15:13 浏览: 108
可以使用Java 8的Stream API和CSV库来实现这个需求,以下是一个简单的实现:
```java
import com.opencsv.CSVWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.lang.reflect.Field;
import java.util.List;
public class CsvUtil {
public static <T> void writeCsv(List<T> dataList, Class<T> clazz, String filePath) throws IOException {
Field[] fields = clazz.getDeclaredFields();
try (CSVWriter writer = new CSVWriter(new FileWriter(filePath))) {
// 写入表头
String[] header = new String[fields.length];
for (int i = 0; i < fields.length; i++) {
header[i] = fields[i].getName();
}
writer.writeNext(header);
// 写入数据
dataList.stream().map(data -> {
String[] row = new String[fields.length];
for (int i = 0; i < fields.length; i++) {
try {
fields[i].setAccessible(true);
Object value = fields[i].get(data);
row[i] = value == null ? "" : value.toString();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
return row;
}).forEach(writer::writeNext);
}
}
}
```
使用时,调用`writeCsv`方法即可:
```java
List<ADto> dataList = ...;
String filePath = "output.csv";
CsvUtil.writeCsv(dataList, ADto.class, filePath);
```
这个实现的核心是使用了Stream API来遍历数据列表,并使用反射获取对象的属性值。另外,为了提高性能,我们使用了try-with-resources语法来确保CSVWriter资源被正确关闭,同时也使用了OpenCSV库来处理CSV格式。
阅读全文