我想在哈希图中添加相同键的值.例如:
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
这是我目前的代码:
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() + " ");
list.add(cell.getBooleanCellValue());
break;
case Cell.CELL_TYPE_NUMERIC:
//System.out.print(cell.getNumericCellValue() + " ");
value = (int) cell.getNumericCellValue();
list.add(cell.getNumericCellValue());
break;
case Cell.CELL_TYPE_STRING:
//System.out.print(cell.getStringCellValue() + " ");
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 会覆盖地图中的任何内容.
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);
这篇关于如何将与哈希图中重复出现的键关联的值相加的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持html5模板网!
如何在 JTextPane 中的组件周围环绕文本?How to wrap text around components in a JTextPane?(如何在 JTextPane 中的组件周围环绕文本?)
MyBatis,如何获取插入的自动生成密钥?[MySql]MyBatis, how to get the auto generated key of an insert? [MySql](MyBatis,如何获取插入的自动生成密钥?[MySql])
在 Java 中插入 Oracle 嵌套表Inserting to Oracle Nested Table in Java(在 Java 中插入 Oracle 嵌套表)
Java:如何将 CLOB 插入 oracle 数据库Java: How to insert CLOB into oracle database(Java:如何将 CLOB 插入 oracle 数据库)
为什么 Spring-data-jdbc 不保存我的 Car 对象?Why does Spring-data-jdbc not save my Car object?(为什么 Spring-data-jdbc 不保存我的 Car 对象?)
使用线程逐块处理文件Use threading to process file chunk by chunk(使用线程逐块处理文件)