计算每个顾客消费额的波峰和波谷 肯定用集合arrylist<HashMap>去存储数值,然后遍历出来 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 HashMap不是键值对吗?如果有三个字段呢?就是说我的数据当中如何还包含一个顾客的消费时间字段数据怎么办? Arrylist<HashMap<String,Object>>() list=new XXXHashMap<String,Object> map=new XXXmap.put("time",object)map.put("ID",object)map.put("folat",object)list.add(map)这不就存储一个数据了么,,, for(int i=0;i++;i<list.size()){list.get(i).getMap的键值} 我是指用集合存储好从数据库中获取到的三个字段数据后,怎么遍历我原来的那个计算波峰、波谷的方法?这个问题困恼我好几天,刚接触java没多久,希望指导一下。 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; }} wave在后面的语句中不是没有使用到吗?它在这里的作用是什么? 用户分组,就是在所有的用户数据中,按照USER_ID的不同,将数据归类。相同USER_ID的数据放在一个List里,为后续计算峰值做准备。程序中的wave对象,在循环体每次循环中都会被使用到,只调用了add方法。后面的代码,用户数据分析过程中也用到了,只是变量名不同而已(userData )。当前循环中,wave对象,是从cache里取出的。cache中的wave对象,是在if语句块中创建的(那个new ArrayList)。后续的用户数据分析,就是将分好组的数据,进行遍历。把每个用户的峰值求出,放到结果对象里面去。 关于如何在MyEclipse中用java 从excel读取数据然后写入mysql数据库 java实现C类似链表 内部类利用出现问题 打开一个文件后,如何接着原来的内容写文件?(吐血求救!!!) RandomAccessFile 路径的问题 很简单的问题,100分相赠 请教一个java的语法问题,不知道是不是java的bug????? 如何用JavaScript判断别的窗口是否关闭? 有关QueryDataSet的中文显示问题 大家看看这段代码是做什么的?老师着急要答案! 求高手点拨一个Java Socket网络传输的“数据完整性”解决方案. 新手求教 类的调用与Scanner
HashMap<String,Object> map=new XXX
map.put("time",object)
map.put("ID",object)
map.put("folat",object)
list.add(map)
这不就存储一个数据了么,,,
list.get(i).getMap的键值
}
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;
}}
wave在后面的语句中不是没有使用到吗?它在这里的作用是什么?