如何在哈希图中求和与重复出现的键相关联的值 [英] How can I sum the values associated with a reoccurring key in a hashmap
本文介绍了如何在哈希图中求和与重复出现的键相关联的值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想在哈希图中添加相同键的值.例如:
I want to add the values of the same keys in a hashmap. For example:
ABC --> 123
DEF --> 456
ABC --> 123
XXX --> 111
XXX --> 222
应成为:
ABC --> 246
DEF --> 456
XXX --> 333
这是我到目前为止的代码:
Here's the code I have so far:
public class Reading {
@SuppressWarnings("unchecked")
public static void main(String[] args) throws IOException {
//Create hashmap to store the the string and int in the excel sheet
HashMap<String, Integer> hm = new HashMap<String, Integer>();
String key = null;
int value = Integer.MIN_VALUE;
// String chkeq; // this
@SuppressWarnings("rawtypes")
ArrayList list = new ArrayList();
// File path or EXCEL file
FileInputStream fos = new FileInputStream(
"/Users/SG/Desktop/tester.xls");
// Sheet is the individual sheet that the data is coming from, in this
// case Sheet1
try {
// Put the XLS file into
HSSFWorkbook workbook = new HSSFWorkbook(fos);
// Get first sheet from the project
HSSFSheet sheet = workbook.getSheetAt(0);
// Go through each row
Iterator<Row> rowIterator = sheet.iterator();
while (rowIterator.hasNext()) {
Row row = rowIterator.next();
// Go through each column in the rows
Iterator<Cell> cellIterator = row.cellIterator();
while (cellIterator.hasNext()) {
Cell cell = cellIterator.next();
switch (cell.getCellType()) {
case Cell.CELL_TYPE_BOOLEAN:
//System.out.print(cell.getBooleanCellValue() + "\t\t");
list.add(cell.getBooleanCellValue());
break;
case Cell.CELL_TYPE_NUMERIC:
//System.out.print(cell.getNumericCellValue() + "\t\t");
value = (int) cell.getNumericCellValue();
list.add(cell.getNumericCellValue());
break;
case Cell.CELL_TYPE_STRING:
//System.out.print(cell.getStringCellValue() + "\t\t");
key = cell.getStringCellValue();
//chkeq = cell.getStringCellValue();
/* for (int i = 0; cellIterator.hasNext(); i++) {
if (chkeq == cellIterator.next().getStringCellValue()) {
System.out.println("same" + cell.getStringCellValue());
}
}*/
list.add(cell.getStringCellValue());
break;
}
if (key != null && value != Integer.MIN_VALUE) {
hm.put(key, value);
key = null;
value = Integer.MIN_VALUE;
}
}
//System.out.println("");
}
for (String keys : hm.keySet())
System.out.println(keys + ":" + hm.get(keys));
fos.close();
// System.out.println(list);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
注意:我已使用Apache POI从Excel工作表中提取数据.
Note: I have used Apache POI to extract the data from an Excel sheet.
代码输出以下内容:
DEF --> 456
ABC --> 123
XXX --> 222
这一切都是用相等的键覆盖被放入哈希图中的最后一个单元格.
All this is doing is overwriting the last cell that was put into the hashmap with equal key.
有什么方法可以将这些值相加而不是覆盖它们?
Is there any way to sum the values instead of writing over them?
推荐答案
放置会覆盖地图中的所有内容.
Put overwrites whatever is in the map.
您需要在映射中获取键的当前值(如果存在)并将其添加到要存储的值中.
You need to get the current value in the map for the key (if it exists) and add it to the value you want to store.
if(hm.containsKey(key))
hm.put(key, value + hm.get(key));
else
hm.put(key, value);
这篇关于如何在哈希图中求和与重复出现的键相关联的值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文