遍历List<A>,把对象转换为对象B,并存到新的List<B>里面
时间: 2024-05-30 18:14:13 浏览: 101
可以使用Java8的Stream API来实现这个需求,示例代码如下:
List<B> bList = aList.stream()
.map(a -> convertAToB(a))
.collect(Collectors.toList());
其中,convertAToB() 是一个自定义的方法,用于将 A 对象转换为 B 对象。
当然,这只是其中一种实现方式,也可以使用传统的 for 循环来进行遍历和转换。
相关问题
Java实现读取word的中文内容并存到mysql的blob字段中
实现步骤:
1. 引入相关的jar包,包括poi和mysql-connector-java。
2. 使用poi的HWPFDocument类读取word文档,获取文档的所有段落和表格。
3. 遍历每个段落和表格,获取其中的文本内容。
4. 将文本内容转换为字节数组,使用PreparedStatement将其存入mysql的blob字段中。
示例代码:
```java
import java.io.FileInputStream;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.util.List;
import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.usermodel.Paragraph;
import org.apache.poi.hwpf.usermodel.Table;
import org.apache.poi.hwpf.usermodel.TableCell;
import org.apache.poi.hwpf.usermodel.TableRow;
public class WordToMysql {
public static void main(String[] args) {
String filename = "test.doc"; //要读取的word文件名
String url = "jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC";
String username = "root";
String password = "123456";
String sql = "INSERT INTO word(content) VALUES(?)"; //要执行的SQL语句
try {
Class.forName("com.mysql.cj.jdbc.Driver");
Connection conn = DriverManager.getConnection(url, username, password);
PreparedStatement pstmt = conn.prepareStatement(sql);
InputStream is = new FileInputStream(filename);
HWPFDocument doc = new HWPFDocument(is);
//遍历每个段落
List<Paragraph> paragraphs = doc.getParagraphs();
for (Paragraph para : paragraphs) {
String text = para.text();
byte[] bytes = text.getBytes("UTF-8");
pstmt.setBytes(1, bytes);
pstmt.executeUpdate();
}
//遍历每个表格
int numTables = doc.getRange().numTables();
for (int i = 0; i < numTables; i++) {
Table table = doc.getRange().getTable(i);
int numRows = table.numRows();
for (int j = 0; j < numRows; j++) {
TableRow row = table.getRow(j);
int numCells = row.numCells();
for (int k = 0; k < numCells; k++) {
TableCell cell = row.getCell(k);
String text = cell.text();
byte[] bytes = text.getBytes("UTF-8");
pstmt.setBytes(1, bytes);
pstmt.executeUpdate();
}
}
}
pstmt.close();
conn.close();
is.close();
System.out.println("Done.");
} catch (Exception e) {
e.printStackTrace();
}
}
}
```
注意事项:
1. 如果word文档中包含图片或其他非文本内容,可能无法正确读取。
2. 为了避免编码问题,建议将读取的文本内容转换为UTF-8编码的字节数组。
运用Python1.首先在,三省站点.xlsx 文件中,遍历福建省所有的‘区站号’。 2.根据已得福建省的‘区站号’,在 MON 文件夹下遍历出所有福建省文件, 举例每个文件名中都包含区站号,为后五位数字。 3.将第二步所得福建省所有(.txt)文件转为 excel 文件,excel 文件后缀要求.xlsx(所有涉及 到的 excel 文件都要求后缀.xlsx),并且插入表头,‘Year’ ‘Mon’ ‘Day’ ‘PRE’。其中在TXT文件中第一列为Year,第二列为Mon,第三列为Day,第四列为PRE
可以使用以下代码来实现你的需求:
```python
import os
import pandas as pd
# 1. 在三省站点.xlsx文件中,遍历福建省所有的'区站号'
station_file = '三省站点.xlsx'
province = '福建省'
df_station = pd.read_excel(station_file)
fujian_station_ids = df_station.loc[df_station['省份'] == province, '区站号'].tolist()
# 2. 在MON文件夹下遍历出所有福建省文件
mon_folder = 'MON'
fujian_files = []
for file in os.listdir(mon_folder):
if file.endswith('.txt'):
file_path = os.path.join(mon_folder, file)
for station_id in fujian_station_ids:
if station_id in file:
fujian_files.append(file_path)
break
# 3. 将福建省所有txt文件转为excel文件,并插入表头'Year' 'Mon' 'Day' 'PRE'
header = ['Year', 'Mon', 'Day', 'PRE']
output_folder = 'output'
for file_path in fujian_files:
df = pd.read_csv(file_path, sep='\s+', header=None)
df.columns = header
output_file = os.path.splitext(file_path)[0] + '.xlsx'
df.to_excel(os.path.join(output_folder, output_file), index=False)
```
上述代码首先从 `三省站点.xlsx` 文件中读取所有站点信息,并筛选出福建省的站点编号。然后,在 `MON` 文件夹下遍历所有的 `.txt` 文件,找到文件名中包含福建省站点编号的文件。接下来,读取每个文件的内容,将其转换为 `DataFrame` 对象,并插入表头。最后,将处理后的数据保存为 `.xlsx` 格式的文件,并存放在 `output` 文件夹中。
请确保在运行代码之前,将 `三省站点.xlsx` 文件和 `.txt` 文件放在合适的位置,并修改代码中的文件路径和文件夹路径为正确的路径。同时,确保已安装 `pandas` 库来处理 Excel 文件。
阅读全文