表格数据存储-ListMap存储并四种方式遍历打印

将表格内容放到多个Map中,再将这几个Map放到List中

package 泛型.表格数据储存;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

public  class tableStoredata {
	public static void main(String[] args) {
		Map<String, Object> map=new HashMap<String, Object>();
		map.put("id",1001);
		map.put("姓名","张涛1");
		map.put("年龄",18);
		map.put("薪水",50000);
		Map<String, Object> map1=new HashMap<String, Object>();
		map1.put("id",1001);
		map1.put("姓名","张涛2");
		map1.put("年龄",18);
		map1.put("薪水",50000);
		Map<String, Object> map2=new HashMap<String, Object>();
		map2.put("id",1001);
		map2.put("姓名","张涛3");
		map2.put("年龄",18);
		map2.put("薪水",50000);
		Map<String, Object> map3=new HashMap<String, Object>();
		map3.put("id",1001);
		map3.put("姓名","张涛4");
		map3.put("年龄",18);
		map3.put("薪水",50000);
		
		List<Map<String , Object>> tableList=new ArrayList<Map<String,Object>>();
		tableList.add(map);
		tableList.add(map1);
		tableList.add(map2);
		tableList.add(map3);
		//第一种
//		for(Map<String , Object> m:tableList) {
//			System.out.println(m);
//		}
		//第二种
		//先对list遍历后对map遍历
//		for(Map<String , Object> m:tableList) {
//			Set<String> keySet=map.keySet();//获取key值
//			for(String key:keySet) {
//				
//			System.out.print(key+"--"+m.get(key)+"\t");
//		}
//			System.out.println();
//	}
		
		


		//第三种
		for(Map<String ,Object> m:tableList) {
			Set<String > keySet=map.keySet();//获取key
			for(Iterator<String > iter =keySet.iterator();iter.hasNext();) {
				String keyString=iter.next();
//				System.out.print(keyString+"--"+map.get(keyString)+"\t");
			}
//			System.out.println();
		}


	//第四种
	for(Map<String ,Object> m:tableList) {
		Set<Entry<String,Object>> set=map.entrySet();//获取键值对
		for(Iterator<Entry<String, Object>> iter =set.iterator();iter.hasNext();) {
			Entry<String ,Object> tempEntry=iter.next();
			System.out.print(tempEntry.getKey()+"--"+tempEntry.getValue()+"\t");
		}
			System.out.println();
	}
	}
	
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,您可以按照以下步骤来实现 Java POI 和 MultiValueMap 进行 2 个表格数据的比对并输出结果: 1. 使用 Java POI 读取两个 Excel 文件数据,并将数据存储在两个不同的 List 。 2. 使用 MultiValueMap 将两个 List 数据进行分组,以便后续进行比对。 3. 遍历分组后的数据,比较每个数据的键和值是否相等。如果相等,则将结果输出到一个新的 Excel 文件。 下面是示例代码: ```java import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.WorkbookFactory; import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.apache.commons.collections4.MultiMap; import org.apache.commons.collections4.map.MultiValueMap; public class CompareExcelData { public static void main(String[] args) { try { // 读取第一个 Excel 文件数据 List<Map<String, Object>> list1 = readExcelData("file1.xlsx"); // 读取第二个 Excel 文件数据 List<Map<String, Object>> list2 = readExcelData("file2.xlsx"); // 使用 MultiValueMap 将两个 List 数据进行分组 MultiMap<Object, Map<String, Object>> groupedData1 = new MultiValueMap<>(); MultiMap<Object, Map<String, Object>> groupedData2 = new MultiValueMap<>(); for (Map<String, Object> data : list1) { groupedData1.put(data.get("key"), data); } for (Map<String, Object> data : list2) { groupedData2.put(data.get("key"), data); } // 比较两个分组后的数据,并将结果输出到新的 Excel 文件 XSSFWorkbook workbook = new XSSFWorkbook(); XSSFSheet sheet = workbook.createSheet("Comparison Result"); int rowNum = 0; XSSFRow row = sheet.createRow(rowNum++); row.createCell(0).setCellValue("Key"); row.createCell(1).setCellValue("Value in File1"); row.createCell(2).setCellValue("Value in File2"); for (Object key : groupedData1.keySet()) { List<Map<String, Object>> dataList1 = (List<Map<String, Object>>) groupedData1.get(key); List<Map<String, Object>> dataList2 = (List<Map<String, Object>>) groupedData2.get(key); if (dataList2 == null) { for (Map<String, Object> data : dataList1) { row = sheet.createRow(rowNum++); row.createCell(0).setCellValue(key.toString()); row.createCell(1).setCellValue(data.get("value").toString()); row.createCell(2).setCellValue(""); } } else { for (Map<String, Object> data1 : dataList1) { boolean found = false; for (Map<String, Object> data2 : dataList2) { if (data1.get("value").equals(data2.get("value"))) { found = true; break; } } if (!found) { row = sheet.createRow(rowNum++); row.createCell(0).setCellValue(key.toString()); row.createCell(1).setCellValue(data1.get("value").toString()); row.createCell(2).setCellValue(""); } } for (Map<String, Object> data2 : dataList2) { boolean found = false; for (Map<String, Object> data1 : dataList1) { if (data2.get("value").equals(data1.get("value"))) { found = true; break; } } if (!found) { row = sheet.createRow(rowNum++); row.createCell(0).setCellValue(key.toString()); row.createCell(1).setCellValue(""); row.createCell(2).setCellValue(data2.get("value").toString()); } } } } workbook.write(new FileOutputStream(new File("result.xlsx"))); workbook.close(); System.out.println("Comparison done. Results written to result.xlsx."); } catch (Exception e) { e.printStackTrace(); } } public static List<Map<String, Object>> readExcelData(String fileName) throws Exception { Workbook workbook = WorkbookFactory.create(new FileInputStream(new File(fileName))); Sheet sheet = workbook.getSheetAt(0); List<Map<String, Object>> dataList = new ArrayList<>(); for (Row row : sheet) { Map<String, Object> data = new HashMap<>(); Cell keyCell = row.getCell(0); Cell valueCell = row.getCell(1); data.put("key", keyCell.getStringCellValue()); data.put("value", valueCell.getStringCellValue()); dataList.add(data); } return dataList; } } ``` 上面的代码,readExcelData 方法用于读取 Excel 文件数据,返回一个包含键值对的 List。groupedData1 和 groupedData2 分别用于存储两个 Excel 文件数据,以 MultiValueMap 类型存储。最后,比较两个分组后的数据,并将结果输出到新的 Excel 文件

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值