我有一个包含以下数据的Excel文件(虚拟)
a b c
d b c
e b c
f b c
g b c
e b c
d b c
d b c
d b c
我正在读取此文件并将结果存储在Set中,以便可以删除重复项,并且我只会得到唯一列表。以下是我尝试过的
FileInputStream file = new FileInputStream(new File("C:\\Users\\harshita.sethi\\Desktop\\ALLOT010T_Input_Keywords.xls"));
HSSFWorkbook w = new HSSFWorkbook(file);
HSSFSheet sheet = w.getSheetAt(0);
int totalrows = sheet.getLastRowNum();
System.out.println(sheet.getRow(0).getPhysicalNumberOfCells());
String[][] data = new String[totalrows+1][sheet.getRow(0).getPhysicalNumberOfCells()];
Set<String[]> keySet = new HashSet<>();
for (int i = 0; i <= totalrows; i++) {
for (int j = 0; j < sheet.getRow(0).getPhysicalNumberOfCells(); j++) {
HSSFCell cell = sheet.getRow(i).getCell(j);
// writing keywords from excel into a hashmap
data[i][j]=cell.getRichStringCellValue().getString();
}
keySet.add(data[i]);
}
Iterator<String[]> iterator = keySet.iterator();
System.out.println("Output Set is as below");
while(iterator.hasNext()){
String[] next = iterator.next();
System.out.println(next[0] + "\t"+ next[1] +"\t "+next[2]);
}
该代码的输出如下所示
Output Set is as below
d b c
e b c
a b c
d b c
d b c
g b c
e b c
f b c
d b c
该集未删除重复项。我可以使用什么其他方法来消除这些重复项。任何列都可以具有不同或相同的值。因此,我无法删除基于特定列的重复项。
我希望整行都是唯一的。
PS:这个数据只是傻瓜。在实际情况下,我有更多列,并且任何列值都可以不同,这将使行唯一。
Set<String[]>
不能使用HashSet
实现,因为数组不会覆盖类的默认值hashCode()
和equals()
实现Object
。
您的替代方法是使用Set<List<String>>
(即轻松地将它们转换String[]
为)或使用自定义。List<String>
Arrays.asList()
TreeSet<String[]>
Comparator<String[]>
例如 :
Set<List<String>> keySet = new HashSet<>();
for (int i = 0; i <= totalrows; i++) {
for (int j = 0; j < sheet.getRow(0).getPhysicalNumberOfCells(); j++) {
HSSFCell cell = sheet.getRow(i).getCell(j);
// writing keywords from excel into a hashmap
data[i][j]=cell.getRichStringCellValue().getString();
}
keySet.add(Arrays.asList(data[i]));
}
Iterator<List<String>> iterator = keySet.iterator();
System.out.println("Output Set is as below");
while(iterator.hasNext()){
List<String> next = iterator.next();
System.out.println(next.get(0) + "\t"+ next.get(1) +"\t "+next.get(2));
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句