向 Map中增加加元素

y11111494 2010-01-04 05:26:47
List<Map<String,String>> list = new ArrayList<Map<String,String>>();
在list中存在如下数据:
[{书名=xml基础 , 作者=张明 , 售价=20.00元 }, {书名=java高级教程 , 作者=张明行 , 售价=23.50元 , 出版社=人教社 }]

如何把list中的数据,放到Map<String, String> map中?
它里面的数据变成如下:
书名=xml基础 , 作者=张明 , 售价=20.00元,书名=java高级教程 , 作者=张明行 , 售价=23.50元 , 出版社=人教社
...全文
6785 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
junjun1984 2010-01-05
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 y11111494 的回复:]
引用 3 楼 islandrabbit 的回复:
试试这个:
Java codepublicclass MapTest {publicstaticvoid main(String[] args) {

        List <Map <String,String>> list=new ArrayList <Map <String,String>>();

        Map <String, String> map1=new HashMap <String, String>();
        Map <String, String> map2=new HashMap <String, String>();

        map1.put(new String("书名"),"xml基础");
        map1.put(new String("作者"),"张明");
        map1.put(new String("售价"),"20.00元");

        map2.put(new String("书名"),"java高级教程");
        map2.put(new String("作者"),"张明行");
        map2.put(new String("售价"),"23.50元");
        map2.put(new String("出版社"),"人教社");

        list.add(map1);
        list.add(map2);

        Map <String, String> map3=new IdentityHashMap <String, String>();for(Map map : list){
            Iterator it= map.entrySet().iterator();while (it.hasNext()) {
                Map.Entry <String, String> pairs= (Map.Entry <String, String>)it.next();
                map3.put(pairs.getKey(),pairs.getValue());
            }
        }

        Iterator it= map3.entrySet().iterator();while (it.hasNext()) {
            Map.Entry <String, String> pairs= (Map.Entry <String, String>)it.next();
            System.out.println(pairs.getKey()+"="+pairs.getValue());
        }

    }
如果想获得“书名”的值怎么办?
用map3.get("书名")返回值是null
[/Quote]
map3 没有值,你去取 当然是null了。
psyuhen 2010-01-05
  • 打赏
  • 举报
回复
呵呵。。个人觉得呀。。
那些书名,作者,售价,出版社封装成一个

class Book{
private String ID;
private String bookName;
private String author;
private String price;
private String publish;
...
//get/set方法。
}

然后用map.put(Book.getId,Book)不就更加好。
y11111494 2010-01-05
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 islandrabbit 的回复:]
试试这个:
Java codepublicclass MapTest {publicstaticvoid main(String[] args) {

List<Map<String,String>> list=new ArrayList<Map<String,String>>();

Map<String, String> map1=new HashMap<String, String>();
Map<String, String> map2=new HashMap<String, String>();

map1.put(new String("书名"),"xml基础");
map1.put(new String("作者"),"张明");
map1.put(new String("售价"),"20.00元");

map2.put(new String("书名"),"java高级教程");
map2.put(new String("作者"),"张明行");
map2.put(new String("售价"),"23.50元");
map2.put(new String("出版社"),"人教社");

list.add(map1);
list.add(map2);

Map<String, String> map3=new IdentityHashMap<String, String>();for(Map map : list){
Iterator it= map.entrySet().iterator();while (it.hasNext()) {
Map.Entry<String, String> pairs= (Map.Entry<String, String>)it.next();
map3.put(pairs.getKey(),pairs.getValue());
}
}

Iterator it= map3.entrySet().iterator();while (it.hasNext()) {
Map.Entry<String, String> pairs= (Map.Entry<String, String>)it.next();
System.out.println(pairs.getKey()+"="+pairs.getValue());
}

}
[/Quote]

如果想获得“书名”的值怎么办?
用map3.get("书名")返回值是null





islandrabbit 2010-01-05
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 y11111494 的回复:]
前提是按照三楼的方法,
如果想获得“书名”的值怎么办?
[/Quote]

这种写法确实给从map中读取数据造成了困难,下面换个写法:

public class MapTest1 {

public static void main(String[] args) {

List <Map <String,String>> list = new ArrayList <Map <String,String>>();

Map<String, String> map1 = new HashMap<String, String>();
Map<String, String> map2 = new HashMap<String, String>();

map1.put("书名", "xml基础");
map1.put("作者", "张明");
map1.put("售价", "20.00元");

map2.put("书名", "java高级教程");
map2.put("作者", "张明行");
map2.put("售价", "23.50元");
map2.put("出版社", "人教社");

list.add(map1);
list.add(map2);

Map<String, List<String>> map3 = new HashMap<String, List<String>>();

for(Map map : list){
Iterator it = map.entrySet().iterator();
while (it.hasNext()) {
Map.Entry<String, String> pairs = (Map.Entry<String, String>)it.next();
String key = pairs.getKey();
String value = pairs.getValue();
if(map3.containsKey(key)){
List<String> valueList = map3.get(key);
valueList.add(value);
}else{
List<String> valueList = new ArrayList<String>();
valueList.add(value);
map3.put(key, valueList);
}

}
}

Iterator it = map3.entrySet().iterator();
while (it.hasNext()) {
Map.Entry<String, List<String>> pairs = (Map.Entry<String, List<String>>)it.next();
for(String value : pairs.getValue()){
System.out.println(pairs.getKey()+"="+value);
}
}

}

wenjjing2lianee 2010-01-05
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 nature_2009 的回复:]
引用楼主 y11111494 的回复:
如何把list中的数据,放到Map <String, String> map中?
它里面的数据变成如下:
书名=xml基础 , 作者=张明 , 售价=20.00元,书名=java高级教程 , 作者=张明行 , 售价=23.50元 , 出版社=人教社



你这个数据结构就不对。

你把这样的数据放置到Map中,那么map.get("书名");这个方法,你希望返回什么???这只会返回最后压入Map的书名value。
[/Quote]

key 都不是唯一的
xlxyeyu 2010-01-05
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 psyuhen 的回复:]
呵呵。。个人觉得呀。。
那些书名,作者,售价,出版社封装成一个
Java codeclass Book{private String ID;private String bookName;private String author;private String price;private String publish;
...//get/set方法。}
然后用map.put(Book.getId,Book)不就更加好。
[/Quote]

嗯,这才是我看着顺眼的。。。
weihthchk 2010-01-05
  • 打赏
  • 举报
回复
两个字符串相同的话,对应的是同一个。
Map在查找Key的时候,先根据传入的key的hashCode()得到的值查找,再根据其equals()的返回值判断找到的那些是否有同一个key。
y11111494 2010-01-05
  • 打赏
  • 举报
回复
所以在map3.get("书名"),或者map3.get(new String("书名"))都会返回null??
y11111494 2010-01-05
  • 打赏
  • 举报
回复
在三楼代码中:
map1.put(new String("书名"), "xml基础");
使用new String("书名")的作用是什么?
是表示当有两个“书名”时,这样new就是不同的对象,就会表示不同的键值吗?

y11111494 2010-01-05
  • 打赏
  • 举报
回复
前提是按照三楼的方法,
如果想获得“书名”的值怎么办?
新建文件夹 2010-01-05
  • 打赏
  • 举报
回复
楼主的问题3楼已经给出了正解。
不过像这种问题最好是面向对象,即采纳9楼的方案。
Nature_2009 2010-01-05
  • 打赏
  • 举报
回复
[Quote=引用楼主 y11111494 的回复:]
如何把list中的数据,放到Map <String, String> map中?
它里面的数据变成如下:
书名=xml基础 , 作者=张明 , 售价=20.00元,书名=java高级教程 , 作者=张明行 , 售价=23.50元 , 出版社=人教社

[/Quote]

你这个数据结构就不对。

你把这样的数据放置到Map中,那么map.get("书名");这个方法,你希望返回什么???这只会返回最后压入Map的书名value。
  • 打赏
  • 举报
回复
那样实现有什么价值吗?如果我想查询“书名”对应的值将返回什么?
zhuwen9 2010-01-04
  • 打赏
  • 举报
回复
学习了..
springbird 2010-01-04
  • 打赏
  • 举报
回复
3楼强人
anyelangya 2010-01-04
  • 打赏
  • 举报
回复
3楼正解!用put向map中添加!
holsten32 2010-01-04
  • 打赏
  • 举报
回复
不错的问题,3楼正解.
就是把list中的map循环拿出来然后加入到map中.理解Map.Entry方法的含义!!
islandrabbit 2010-01-04
  • 打赏
  • 举报
回复
试试这个:

public class MapTest {

public static void main(String[] args) {

List <Map <String,String>> list = new ArrayList <Map <String,String>>();

Map<String, String> map1 = new HashMap<String, String>();
Map<String, String> map2 = new HashMap<String, String>();

map1.put(new String("书名"), "xml基础");
map1.put(new String("作者"), "张明");
map1.put(new String("售价"), "20.00元");

map2.put(new String("书名"), "java高级教程");
map2.put(new String("作者"), "张明行");
map2.put(new String("售价"), "23.50元");
map2.put(new String("出版社"), "人教社");

list.add(map1);
list.add(map2);

Map<String, String> map3 = new IdentityHashMap<String, String>();

for(Map map : list){
Iterator it = map.entrySet().iterator();
while (it.hasNext()) {
Map.Entry<String, String> pairs = (Map.Entry<String, String>)it.next();
map3.put(pairs.getKey(),pairs.getValue());
}
}

Iterator it = map3.entrySet().iterator();
while (it.hasNext()) {
Map.Entry<String, String> pairs = (Map.Entry<String, String>)it.next();
System.out.println(pairs.getKey()+"="+pairs.getValue());
}

}
mouer 2010-01-04
  • 打赏
  • 举报
回复
循环 map.putall(list.get(i))
rascalboy520 2010-01-04
  • 打赏
  • 举报
回复
没看明白你说的什么
向map中加元素,用的是put(K, V)

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧