肯定用集合arrylist<HashMap>去存储数值,然后遍历出来

解决方案 »

  1.   

    HashMap不是键值对吗?如果有三个字段呢?就是说我的数据当中如何还包含一个顾客的消费时间字段数据怎么办?
      

  2.   

    Arrylist<HashMap<String,Object>>() list=new XXX
    HashMap<String,Object> map=new XXX
    map.put("time",object)
    map.put("ID",object)
    map.put("folat",object)
    list.add(map)
    这不就存储一个数据了么,,,
      

  3.   

    for(int i=0;i++;i<list.size()){
    list.get(i).getMap的键值
    }
      

  4.   

    我是指用集合存储好从数据库中获取到的三个字段数据后,怎么遍历我原来的那个计算波峰、波谷的方法?这个问题困恼我好几天,刚接触java没多久,希望指导一下。
      

  5.   

    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Map;
    import java.util.Random;public class T { public static void main(String[] args) {
    // 获得所有的用户数据,数据太多容易爆掉内存。
    final List<Map<String,Object>> allDatas = getAllDatas();
    // 保存结果信息
    final Map<String,List<Map<String,Object>>> result = new HashMap<String,List<Map<String,Object>>>();
    // 数据处理过程中的数据缓存
    Map<String,List<Map<String,Object>>> cache = new HashMap<String,List<Map<String,Object>>>();
    //用户信息分组
    for(Iterator<Map<String,Object>> iter = allDatas.listIterator();iter.hasNext();){
    Map<String,Object> data = iter.next();
    String userId = (String)data.get("USER_ID");
    if(cache.get(userId)==null){
    cache.put(userId, new ArrayList<Map<String,Object>>());
    }
    List<Map<String,Object>> wave = cache.get(userId);
    wave.add(data);
    }
    //用户数据分析
    for(Iterator<Map.Entry<String,List<Map<String,Object>>>> iter = cache.entrySet().iterator();iter.hasNext();){
    Map.Entry<String,List<Map<String,Object>>> e = iter.next();
    String userId = e.getKey();
    List<Map<String,Object>> userData = e.getValue();
    List<Map<String,Object>> points = new ArrayList<Map<String,Object>>();
    int direction=((Float)userData.get(0).get("FEE_VALUE"))>0?-1:1; 
    for (int i = 1; i < userData.size(); i++) {
    if ((((Float)userData.get(i).get("FEE_VALUE")) - ((Float)userData.get(i-1).get("FEE_VALUE"))) * direction > 0) {
    direction *= -1;
    if (direction == 1) {
    userData.get(i-1).put("POINT", "波峰");
    } else {
    userData.get(i-1).put("POINT", "波谷");
    }
    points.add(userData.get(i-1));
    }
    }
    result.put(userId, points);
    }
    // 打印综合信息
    print(allDatas);
    } private static void print(List<Map<String, Object>> allDatas) {
    System.out.println("ID\tUSER_ID\tFEE_VALUE\tPOINT");
    for(Iterator<Map<String, Object>>iter=allDatas.listIterator();iter.hasNext();){
    Map<String, Object> userData = iter.next();
    System.out.print(userData.get("ID")+"\t"+userData.get("USER_ID")+"\t"+userData.get("FEE_VALUE"));
    if(userData.get("POINT")!=null){
    System.out.print("\t"+userData.get("POINT"));
    }
    System.out.println();
    }
    } static List<Map<String,Object>> getAllDatas(){
    final int NUM_OF_USER = 5;//用户个数
    final int DATAS_PER_USER = 10;//每用户的数据量
    final float MIN_LIMIT = -10;
    final float MAX_LIMIT = 10;
    final Random rand = new Random(System.currentTimeMillis());
    int id = 1;
    List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
    for(int userId=1;userId<=NUM_OF_USER;userId++){
    for(int i=0;i<DATAS_PER_USER;i++){
    Map<String,Object> data = new HashMap<String,Object>();
    data.put("ID",String.valueOf(id++));
    data.put("USER_ID",String.valueOf(userId));
    data.put("FEE_VALUE", Float.valueOf(rand.nextFloat()*(MAX_LIMIT-MIN_LIMIT)-(MAX_LIMIT-MIN_LIMIT)/2));
    list.add(data);
    }
    }
    return list;
    }}
      

  6.   


    wave在后面的语句中不是没有使用到吗?它在这里的作用是什么?
      

  7.   

    用户分组,就是在所有的用户数据中,按照USER_ID的不同,将数据归类。相同USER_ID的数据放在一个List里,为后续计算峰值做准备。程序中的wave对象,在循环体每次循环中都会被使用到,只调用了add方法。后面的代码,用户数据分析过程中也用到了,只是变量名不同而已(userData )。当前循环中,wave对象,是从cache里取出的。cache中的wave对象,是在if语句块中创建的(那个new ArrayList)。后续的用户数据分析,就是将分好组的数据,进行遍历。把每个用户的峰值求出,放到结果对象里面去。