java8实现:将List<ADto>出力成csv文件。参数为List<ADto>、ADto.class、filePath
时间: 2024-05-12 17:15:30 浏览: 149
可以使用Java 8中的Stream API和CSV库来实现将List<ADto>输出成CSV文件的功能。
首先,需要添加CSV库的依赖。这里以OpenCSV为例,在Maven项目中添加以下依赖:
```xml
<dependency>
<groupId>com.opencsv</groupId>
<artifactId>opencsv</artifactId>
<version>5.5.2</version>
</dependency>
```
然后,可以编写一个方法,接受List<ADto>、ADto.class和filePath作为参数,实现将数据输出成CSV文件的功能。代码如下:
```java
import com.opencsv.CSVWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.lang.reflect.Field;
import java.util.List;
import java.util.stream.Collectors;
public class CsvUtil {
public static <T> void writeCsv(List<T> dataList, Class<T> clazz, String filePath) {
try (CSVWriter writer = new CSVWriter(new FileWriter(filePath))) {
// 获取类的所有字段
Field[] fields = clazz.getDeclaredFields();
// 获取字段名数组
String[] headers = getFieldNames(fields);
// 写入表头
writer.writeNext(headers);
// 写入数据
List<String[]> data = dataList.stream()
.map(t -> getFieldValues(t, fields))
.collect(Collectors.toList());
writer.writeAll(data);
} catch (IOException e) {
e.printStackTrace();
}
}
// 获取字段名数组
private static String[] getFieldNames(Field[] fields) {
return Stream.of(fields)
.map(Field::getName)
.toArray(String[]::new);
}
// 获取字段值数组
private static <T> String[] getFieldValues(T t, Field[] fields) {
return Stream.of(fields)
.map(f -> {
try {
f.setAccessible(true);
return String.valueOf(f.get(t));
} catch (IllegalAccessException e) {
e.printStackTrace();
return "";
}
})
.toArray(String[]::new);
}
}
```
这个方法使用了Java 8的Stream API来处理列表数据,使用反射获取类的字段名和字段值。在写入CSV文件时,需要使用CSVWriter类来处理。
使用示例:
```java
List<ADto> dataList = ...
CsvUtil.writeCsv(dataList, ADto.class, "output.csv");
```
这样,就可以将数据输出成CSV文件了。
阅读全文