今天同事在帮我测之前写的代码,一件很好玩的事情出现:
//从解压文件中截取每条记录中的CustomerID和它对应的得分字符串
public static Map getCustomerIDMapUnzipFile(String file){
String read="";
File f= new File(file);
InputStreamReader inputStreamReader =null;
BufferedReader bufferedReader=null;
try {
inputStreamReader = new InputStreamReader(new FileInputStream(f),"UTF-8");
bufferedReader = new BufferedReader(inputStreamReader);
while((read = bufferedReader.readLine())!=null){
int i = read.indexOf("{");//找出O_B_L_RESULT_F_01所在的索引位置
String s =read.substring(0, i);//取O_B_L_RESULT_F_01的值的字符串
int index= read.indexOf("{");
String rt=read.substring(index, read.length());//除去{前面的customerid的部分
ResultObject resultObject = new ResultObject(rt);
JSONObject Returns = new JSONObject(resultObject.getResult("OBJECTS", ""));//再把它封装成JSONObject对象
mapCustomerID.put(s,Returns);
}
} catch (Exception e) {
e.printStackTrace();
logger.error("从文件读取数据失败!"+e);
}finally{
try {
inputStreamReader.close();
bufferedReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return mapCustomerID;
}
之前我测试一直没的问题,今天他测了下,这个mapCustomerID,mapCustomerID.size()始终为1。原以为是没做循环,又把while中间的信息打印看了,循环了呀!这是为啥!
起初以为是文件的换行问题,控制台打印的信息没的问题,一行一行的打出来。
最后还是在自己的机子上拿回来测。
这才发现了问题的所在:文件的每条数据的"{"之前的数据都是一样的,那么这里就等于说把一样的值当做mapCustomerID的key来放进去。汗!
这样不会报错?
不会!
打印出来的size()为1.,这时存的是什么值呢?
还是写个累来试试看吧:
import java.util.HashMap;
import java.util.Map;
public class MapTest {
static Map<String,String> map = new HashMap<String, String>();
public static void main(String[] args){
MapTest.map.put("1", "2");
MapTest.map.put("1", "4");
for (Map.Entry<String, String> entry: map.entrySet())
System.out.println(entry.getValue());
}
}
控制台打印的结果为4!!!
这时大家应该都明白了,Map的key是不能重复的,已近存在的key,会被重复的覆盖掉!
分享到:
相关推荐
该表中,MAP_KEY和MAP_VALUE都是非空字段,同时MAP_KEY字段也是主键。 再比如,AFFILIATE(联盟)表,它描述了与联盟相关的信息。表中包含了PARTY_ID(当事人标识),AFFILIATE_NAME(联盟名称),AFFILIATE_...
在处理外键关系的连接问题时,MapReduce可以通过在Map阶段创建一个临时键(通常是外键和主键的组合),在Reduce阶段再进行匹配和连接,这样即使键不完全相同,也能正确地完成数据的连接操作。 MapReduce模型的简单...
综上所述,iBATIS SQL Map 提供了一种强大的解决方案,用于简化数据库访问代码,特别适合那些希望控制SQL语句细节而又不想编写大量代码的开发者。通过其丰富的特性和灵活的配置选项,SQL Map 成为了许多Java应用中不...
五、集合映射的细节 1. Set映射:无序且不允许有重复元素,`<set>`标签中可通过`inverse`属性控制关联维护,`order-by`属性指定排序规则。 2. List映射:有序,通过`index`属性指定索引字段,如`list_index`。 3. ...
- `@MapKey`:用于映射Map类型的关联,指定Map的键是如何映射的。 - `@OrderBy`:用于排序关联集合。 6. **组合**: - `@Embeddable`:定义一个可以被其他实体包含的复合类。 - `@Embedded`:将一个嵌入式类...
- **一元条件元素**:如 `<where>`、`<set>` 等,用于自动处理 SQL 语法细节。 - **其他元素**:还包括 `<foreach>`、`<trim>` 等,用于处理循环和修剪多余字符等场景。 #### 八、使用 SQL Map API 编程 - **配置 ...
最后,`AlgorithmProject`可能是该项目的源代码或者文档,里面可能包含了具体的实现细节,如Mapper和Reducer类的编写,输入输出格式的定义,以及可能的性能测试和结果分析。 总之,使用Hadoop MapReduce实现矩阵...
### ibatis_sqlMap的配置总结 #### 一、ibatis_sqlMap配置的重要性 在iBatis框架中,SqlMap的配置扮演着极其重要的角色。...熟练掌握这些配置细节,能够显著提升iBatis项目的开发效率和代码质量。
- 输入的数据集被切分为多个较小的数据块(Splits)。 - 每个Split被转换为键值对的形式,并发送给用户自定义的Map函数进行处理。 - Map函数的输出会被按照键进行分区,并且在发送给Reducer之前,每个分区的数据...
- **作用**:根据主键删除指定记录。 - **实现细节**: - 构建删除SQL语句并调用`update()`方法执行删除操作。 #### ORM功能实现 为了支持简单的ORM功能,BaseDAO类内部需要实现几个关键的辅助方法,用于动态...
CQL引用部分描述了CQL的词法结构、大小写规则、转义字符、有效字面量、指数表示法等语法细节。它还包括了CQL中的数据类型,比如Blob、集合类型、UUID和时间戳类型等。同时,它提供了关于keyspace属性、表属性以及子...
在Haskell中,由于其不可变性,我们可以简单地创建一个新的`HitCounter`,而不必担心并发问题。 ```haskell -- 假设我们有一个主键 data PrimaryKey = PrimaryKey String deriving (Eq, Show) -- 使用主键的命中...
ccflow的高级用户需要熟悉各个表并掌握关键的表结构,但这并不意味着必须全面掌握所有细节。ccflow的表命名遵循特定规则,通常是前缀(如"Sys_"或"Port_")加上表名,表名多为英文缩写或拼音大写组合,例如"Port_Emp...
Java面试题涵盖了许多核心概念,包括并发安全性、集合框架、语法细节、异常处理、数据库管理、HTTP状态码以及面向对象编程的关键概念。以下是对这些题目所涉及知识点的详细解释: 1. **线程安全**:Vector、...
例如,可以创建一个名为"Items"的表,包含"id"(主键)、"title"和"description"字段,分别对应ListView的列表项标题和描述。接着,当应用需要填充ListView时,可以从SQLite数据库中查询数据,将其转换为Map列表,再...
- `@AttributeOverride`:用于覆盖嵌入对象中属性的映射细节。 ### 总结 JPA通过其丰富的批注体系,提供了强大的灵活性和控制力,使得开发人员能够在不同的场景下高效地管理数据持久化。了解并熟练运用这些批注,...
JPA允许开发者以声明式方式定义Java对象如何与关系数据库表进行映射,从而无需过多关注底层存储细节。在JPA之前,Java EE应用程序通常使用容器管理的实体bean来表示持久化类。然而,通过JPA,任何普通的旧式Java对象...
- **自动生成的主键**:支持自动为主键字段生成唯一值。 - **存储过程**:支持调用数据库中的存储过程。 - **parameterClass**:指定传递给 SQL 语句的参数类型。 - **parameterMap**:更复杂的参数映射机制,...
- MapReduce框架负责作业调度、容错管理和数据分发,开发者只需关注map和reduce函数的实现,无需关心底层分布式系统的细节。 3. **Bigtable** - Bigtable是一种分布式的、结构化的数据存储系统,用于支持Google的...