Map.Entry使用说明

1.Map.Entry说明

Map是java中的接口,Map.Entry是Map的一个内部接口。

Map提供了一些常用方法,如keySet()、entrySet()等方法,keySet()方法返回值是Map中key值的集合;entrySet()的返回值也是返回一个Set集合(在JDK的api说明中确实是一个Set<K>),此集合的元素类型为Map.Entry。对Map.Entry的说明为:

Map.entrySet 方法返回映射的 collection 视图,其中的元素属于此类。获得映射项引用的唯一 方法是通过此 collection 视图的迭代器来实现。这些 Map.Entry 对象仅 在迭代期间有效;更确切地讲,如果在迭代器返回项之后修改了底层映射,则某些映射项的行为是不确定的,除了通过 setValue 在映射项上执行操作之外。接口中有getKey(), getValue, setValue()方法。

2.Map.Entry使用

Map类提供了一个称为entrySet()的方法,这个方法返回一个Map.Entry实例化后的对象集。接着,Map.Entry类提供了一个getKey()方法和一个getValue()方法,因此,上面的代码可以被组织得更符合逻辑。举例如下:

 Set entries = map.entrySet( );
 if(entries != null) {
     Iterator iterator = entries.iterator( );
     while(iterator.hasNext( )) {
         Map.Entry entry =iterator.next( );
         Object key = entry.getKey( );
         Object value = entry.getValue();
         ;....
     }
}

尽管增加了一行代码,我们却省略了许多对Map不必要的“get”调用。同时,提供给开发人员一个同时保持了关键字和其对应的值的类。Map.Entry同时也提供了一个setValue()方法,程序员可以使用它修改map里面的值。

文章转载于:http://www.cnblogs.com/guoxu/articles/1703393.html

这段代码是使用EasyExcel读取Excel文件并解析数据的核心逻辑,具体解释如下: ```java @Override public void invoke(Map<Integer, String> data, AnalysisContext context) { if (context.readRowHolder().getRowIndex() < context.readSheetHolder().getSheet().getHeadLineMun()) { // 当前行是表头行,存储表头信息 for (Map.Entry<Integer, String> entry : data.entrySet()) { int columnIndex = entry.getKey(); String columnName = entry.getValue(); headMap.put(columnIndex, columnName); } } else { // 当前行是数据行,进行数据处理 for (Map.Entry<Integer, String> entry : data.entrySet()) { int columnIndex = entry.getKey(); String columnValue = entry.getValue(); String columnName = headMap.get(columnIndex); // 处理数据 } } } ``` 1. `public void invoke(Map<Integer, String> data, AnalysisContext context)`:该方法是实现`AnalysisEventListener`接口时必须实现的方法,用于处理Excel文件中的每一行数据。当读取到一行数据时,该方法会被调用一次。 2. `if (context.readRowHolder().getRowIndex() < context.readSheetHolder().getSheet().getHeadLineMun())`:判断当前行是否为表头行。通过`context.readRowHolder().getRowIndex()`获取当前行的索引,通过`context.readSheetHolder().getSheet().getHeadLineMun()`获取表头所在的开始行索引,如果当前行的索引小于表头开始行索引则说明当前行是表头行。 3. `for (Map.Entry<Integer, String> entry : data.entrySet())`:遍历当前行的所有列数据。`data`是当前行的数据Map,key为列索引,value为该列的数据值。通过`entry.getKey()`获取列索引,通过`entry.getValue()`获取列数据值。 4. `int columnIndex = entry.getKey();`:获取当前列的索引。 5. `String columnName = entry.getValue();`:获取当前列的数据值。 6. `headMap.put(columnIndex, columnName);`:将当前列的索引和数据值存储在`headMap`中。`headMap`是一个`TreeMap`,用于存储表头信息。在`invokeHeadMap()`方法中,会将所有的表头信息存储在`headMap`中。 7. `String columnValue = entry.getValue();`:获取当前列的数据值。 8. `String columnName = headMap.get(columnIndex);`:根据当前列的索引获取表头的名称。 9. `// 处理数据`:根据表头名称和列数据值,进行数据处理。 总的来说,这段代码的作用是:判断当前行是否为表头行,如果是则将表头信息存储在`headMap`中;如果不是则进行数据处理。在数据处理时,根据表头名称和列数据值进行处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值