1.List
List集合中的对象是一个Map对象,而这个Map对象的键是String类型,值是Object类型
List以Map接口对象为列表对象。
Map以String为键,以Object为值。
List里只能放Map类型的对象,而这个Map类型的对象又只能放以String类型为键,以Object类型为值的键值对。
2.创建
1. List<Map<String, Object>> listMaps = new ArrayList<Map<String, Object>>();
2. List<Map<String, Object>> childs = new ArrayList<>();
3.使用
import java.util.*;
public class TestListMap {
public static void main(String[] args) {
List<Map<String, Object>> listMaps = new ArrayList<Map<String, Object>>();
Map<String, Object> map1 = new HashMap<String, Object>();
map1.put("1", "a");
map1.put("2", "b");
map1.put("3", "c");
listMaps.add(map1);
Map<String, Object> map2 = new HashMap<String, Object>();
map2.put("11", "aa");
map2.put("22", "bb");
map2.put("33", "cc");
listMaps.add(map2);
//遍历listMaps 集合的三种方式
for (Map<String, Object> map : listMaps) {
for (String s : map.keySet()) {
System.out.print(map.get(s) + " ");
}
}
System.out.println();
System.out.println("========================");
for (int i = 0; i < listMaps.size(); i++) {
Map<String, Object> map = listMaps.get(i);
Iterator iterator = map.keySet().iterator();
while (iterator.hasNext()) {
String string = (String) iterator.next();
System.out.println(map.get(string));
}
}
System.out.println("++++++++++++++++++++++++++++");
for (Map<String, Object> map : listMaps) {
for (Map.Entry<String, Object> m : map.entrySet()) {
System.out.print(m.getKey() + " ");
System.out.println(m.getValue());
}
}
System.out.println("-----------------------------");
}
}
关于 List<Map<String, Object>>存值的问题
List<Map<String, Object>> listMap = new ArrayList<Map<String,Object>>();
Map<String, Object> map = new HashMap<String, Object>();
for(int i=0;i<5;i++) {
map.put("a", i);
map.put("b", i);
listMap .add(map);
}
System.out.println(list);
输出的结果是:[{b=4, a=4}, {b=4, a=4}, {b=4, a=4}, {b=4, a=4}, {b=4, a=4}]
换了一种方式
List<Map<String, Object>> listMap = new ArrayList<Map<String,Object>>();
for(int i=0;i<5;i++) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("a", i);
map.put("b", i);
listMap .add(map);
}
System.out.println(list);
输出的结果是:[{b=0, a=0}, {b=1, a=1}, {b=2, a=2}, {b=3, a=3}, {b=4, a=4}];
原因:
出现这种区别的原因就是,List<Map<String, Object>> 里面存放的是map的地址,尽管循环了五次,但是每次的map对应的都是同一个地址,所以最后listMap里面存放的是五个同样的map。
正确的写法是每次循环的时候都实例化一个新的map对象,这样listMap在add的时候,每次都是存的不一样的map
如何取值:
List<Map<String, Object>> listMap = activityService.getlLisbllc(affairid);
for (int i = 0; i < listMap.size(); i++) {
String flowlogtime = " ";
String sysuserrealnameczry = " ";
if (listMap.get(i).get("flowlogtime") != null && listMap.get(i).get("flowlogtime").toString().length() != 0) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss");
flowlogtime = simpleDateFormat.format(listMap.get(i).get("flowlogtime"));
}
if (listMap.get(i).get("sysuserrealnameczry") != null && listMap.get(i).get("sysuserrealnameczry").toString().length() != 0) {
sysuserrealnameczry = listMap.get(i).get("sysuserrealnameczry").toString();
}
}
案例使用:
Controller:
@Autowired
private ActivityService activityService;
List<Map<String, Object>> listMap = activityService.getlLisbllc(affairid);
Service:
List<Map<String, Object>> getlLisbllc(String affairid);
ServiceImpl:
@Autowired
private SysUserMapper sysUserMapper;
@Override
public List<Map<String, Object>> getlLisbllc(String affairid) {
return sysUserMapper.getlLisbllc(affairid);
}
SysUserMapper:
List<Map<String, Object>> getlLisbllc(@Param("affairid") String affairid);
SysUserMapper.xml:
<select id="getlLisbllc" parameterType="string" resultType="java.util.LinkedHashMap">
select flow_Log_Time as flowlogtime,
Sys_User.sys_User_Real_Name as sysuserrealnameczry,
sys_User_Phone as sysuserphoneczry,
flow_log_content as flowlogcontentczry
from Affair
LEFT JOIN flow_log on flow_log.record_id=Affair.affair_id
LEFT JOIN Sys_User on flow_log.user_id=Sys_User.sys_user_id
where Affair.affair_id=#{affairid} ORDER BY flow_Log_Time
</select>
Map基础知识
Map 是一种键-值对(key-value)集合,Map 集合中的每一个元素都包含一个键对象和一个值对象。其中,map中键可以是任意类型的对象,键对象不允许重复,每个键都有一个对应的值。值对象可以重复,并且值对象还可以是 Map 类型的。
键-值对(key-value)就如同数组中的下标和值,通过通过键找值就如同下标找数组值。
Map本身是一个接口,要使用Map需要通过子类进行对象实例化。
如声明Map
HashMap map = new HashMap();
map.put("1", "a");
map.put("2", "b");
map.put("3", "c");
map.put("4", "d");
map.put("5", "e");
List
List是有序的Collection,使用此接口能够精确的控制每个元素插入的位置。用户能够使用索引(元素在List中的位置,类似于数组下 >标)来访问List中的元素,这类似于Java的数组。
void add(String item) //依次往后添加添加元素
void add(String item, int index) //在指定位置处添加元素
void remove(int position) //删除第几个元素(索引从0开始)
void remove(String item) //删除相同的元素
void removeAll() //删除所有元素