java第一列相同的行的第二列合并

合并有重复列的行
现在两列数据如下:
1000    10001

2000    20001

2000    20002

3000    30001

3000    30002

3000    30003

这样的格式,第一列有重复,
想要把第一列相同的行的第二列合并起来。

如下所示的格式:

1000 : 10001
2000 : 20001,20002
3000 : 30001,30002,30003


代码如下:

List<Event> listA = new ArrayList<Event>();
		List<Event> listB = new ArrayList<Event>();
		Event evt = null;
		//构造伪数据
		for(int i=1;i<2;i++)
		{
			evt = new Event();
			evt.setName("1000");
			evt.setAge("1000"+i);
			listA.add(evt);
		}
		for(int i=1;i<3;i++)
		{
			evt = new Event();
			evt.setName("2000");
			evt.setAge("2000"+i);
			listA.add(evt);
		}
		for(int i=1;i<4;i++)
		{
			evt = new Event();
			evt.setName("3000");
			evt.setAge("3000"+i);
			listA.add(evt);
		}
		//拷贝集合
		listB.addAll(listA);
		
		List<String> listTemp = new ArrayList<String>();
		//循环集合A
		for(int i=0;i<listA.size();i++)
		{
			StringBuffer sbA = new StringBuffer();
			//把第每一次的第一列找出来
			sbA.append(listA.get(i).getName()).append(": ");
			for(int j=0;j<listB.size();j++)
			{
				//如果存在集合A和集合B相同的第一列,则把第二列的数据追加
				if(listA.get(i).getName().equals(listB.get(j).getName()))
				{
					sbA.append(listB.get(j).getAge()).append(",");
				}
			}
			//最后把组装好的数据放入临时数组
			listTemp.add(sbA.toString());
		}
		//因为最后可能存在相同的行,这里去除重复项
		List<String> list = new ArrayList<String>();
		for(String str : listTemp)
		{
			if(!list.contains(str))
			{
				list.add(str);
			}
		}
		System.out.println("最后的数据格式如下:");
		for(String str : list)
		{
			if(str.endsWith(","))
			{
				str = str.substring(0,str.length() - 1);
			}
			System.out.println(str);
		}


Java中,我们可以利用Apache POI库来处理Excel文件,包括读取、操作以及合并单元格。如果你想要根据某个特定列的值相同合并,可以按照以下步骤进: 1. 导入所需的库:首先需要添加Apache POI依赖,例如Maven中添加`<dependency>`到pom.xml中: ```xml <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.x.x</version> <!-- 请替换实际版本 --> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>4.x.x</version> <!-- 请替换实际版本 --> </dependency> ``` 2. 加载Excel工作簿并获取Sheet: ```java FileInputStream fis = new FileInputStream("your_file.xlsx"); Workbook workbook = WorkbookFactory.create(fis); Sheet sheet = workbook.getSheetAt(0); // 假设你要处理的是第一个sheet ``` 3. 遍历,查找相同的列值并合并: ```java // 假设我们关注列A int targetColumn = 0; Row prevRow = null; for (Row row : sheet) { Cell cell = row.getCell(targetColumn); if (cell != null && !cell.getStringCellValue().isEmpty()) { // 检查列是否有非空值 String value = cell.getStringCellValue(); if (prevRow != null && value.equals(prevRow.getCell(targetColumn).getStringCellValue())) { // 合并 Cell firstCell = row.getFirstCellNum() == 0 ? row.createCell(0) : row.createCell(row.getFirstCellNum() - 1); for (int i = 0; i < row.getLastCellNum(); i++) { firstCell.setCellValue(row.getCell(i).getCellValue()); } // 移除已合并 sheet.removeRow(prevRow); } else { prevRow = row; } } } workbook.write(new FileOutputStream("output.xlsx")); // 写回新的Excel文件 fis.close(); ``` 在这个例子中,我们假设列A的值决定是否合并。每次遍历到一,如果它的值与上一在目标列相同,则将该的内容合并到上一,并移除当前。最后,将修改后的数据保存到新的Excel文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值