Java数据结构算法求教!(合并集合问题)

会飞的鱼1216 2018-06-06 10:01:45
下面贴上代码片段:

/**
* 该集合存放下面4个集合的合并集
*/
List<LoadLogPoint> result = new ArrayList<LoadLogPoint>();

List<Point> points = dao.getLoadPoints(dateTimes, min, Pid);
List<Point> waterUps = dao.getWaterUpPoints(dateTimes, min, Pid);
List<Point> waterDowns = dao.getWaterDownPoints(dateTimes, min, Pid);
List<Point> waterHots = dao.getWaterHotPoints(dateTimes, min, Pid);

下面贴上PoJo类:

public class Point {
/**
* 数据ID
*/
private String id;
/**
* 主数据关联ID
*/
private String Pid;
/**
* 日期
*/
private String date;
/**
* 日期时间
*/
private String dateTime;
/**
* 小时
*/
private String hour;
/**
* 分钟
*/
private String mins;
/**
* 点位值
*/
private String value;
/**
* 每分钟取点余数
*/
private String mod;
}

public class LoadLogPoint {
private String id; //序号
private String Pid; //关联主表ID
private String date; //日期 主要判断参数
private String time; //时间 小时 hour 主要判断参数

private String point_jh_a; //计划负荷 每小时0分钟数据
private String point_jh_b; //计划负荷 每小时15分钟数据
private String point_jh_c; //计划负荷 每小时30分钟数据
private String point_jh_d; //计划负荷 每小时45分钟数据

private String point_sj_a; //实际负荷每小时0分钟数据
private String point_sj_b; //实际负荷每小时15分钟数据
private String point_sj_c; //实际负荷每小时30分钟数据
private String point_sj_d; //实际负荷每小时45分钟数据

private String water_up; //上库水位
private String water_down; //下库水位

private String water_up_scale; //上库渗水刻度
private String water_up_amount; //上库渗水量

private String water_head; //水头
private String water_hot; //水温
}


说明:
points 集合中 每小时有4条数据(每15分钟一条),所有一天24小时最多有24*4条数据
waterUps 集合中 每小时有1条数据(每小时一条),一天24条
waterDowns 集合中 每小时有1条数据(每小时一条),一天24条
waterHots 集合中 每小时有1条数据(每小时一条),一天24条

需要得到的 result 集合结构为:

将 points 集合中对象 Point 的 hour = 0 && mins = 0 的 value 值放入
result 集合中对象 LoadLogPoint 的 point_jh_a 和 point_jh_a 元素中。

points 集合中对象 Point 的 hour = 0 && mins = 15 的 value 值放入
result 集合中对象 LoadLogPoint 的 point_jh_b 和 point_jh_b 元素中。

points 集合中对象 Point 的 hour = 0 && mins = 30 的 value 值放入
result 集合中对象 LoadLogPoint 的 point_jh_c 和 point_jh_c 元素中。

points 集合中对象 Point 的 hour = 0 && mins = 45 的 value 值放入
result 集合中对象 LoadLogPoint 的 point_jh_d 和 point_jh_d 元素中。

waterUps 集合中对象 Point 的 hour = 0 的 value 值放入 result 集合中对象 LoadLogPoint 的 water_up 元素中。
waterDowns 集合中对象 Point 的 hour = 0 的 value 值放入 result 集合中对象 LoadLogPoint 的 water_down 元素中。
waterHots 集合中对象 Point 的 hour = 0 的 value 值放入 result 集合中对象 LoadLogPoint 的 water_hot 元素中。
最后将 hour 的值 放入 result 集合中对象 LoadLogPoint 的 time 元素中,这样就生成了一条数据,简单来将就是将7条
数据合成一条数据。下面的数据根据判断 hour 和 mins 再循环生成23条数据生成一个大小为24的result集合。

跪求高效方法!原因 一个action 需要重复操作2次 ,然后还要讲生成的集合批量update呢!

...全文
981 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
会飞的鱼1216 2018-06-06
  • 打赏
  • 举报
回复
引用 2 楼 leesh218 的回复:
每4条points数据 取一次小时数据 for(int i=0;i<points.size();i++) { if((i+1)%4==0)//能否被4整除 { add waterUps.get((i+1)/4-1) add waterDowns.get((i+1)/4-1) add waterHots.get((i+1)/4-1) } }
不太明白能否详细点?
leesh218 2018-06-06
  • 打赏
  • 举报
回复
每4条points数据 取一次小时数据 for(int i=0;i<points.size();i++) { if((i+1)%4==0)//能否被4整除 { add waterUps.get((i+1)/4-1) add waterDowns.get((i+1)/4-1) add waterHots.get((i+1)/4-1) } }
会飞的鱼1216 2018-06-06
  • 打赏
  • 举报
回复
用过while循环实现感觉太复杂
leesh218 2018-06-06
  • 打赏
  • 举报
回复
<points> 按时间排序 <waterUps> 按时间排序 <waterDowns> 按时间排序 <waterHots> 按时间排序 00:00 0 填充 00:15 1 00:30 2 00:45 3 01:00 4 填充 01:15 5 01:30 6 01:45 7 02:00 8 填充 …… …… …… …… <points>.get(0) 填充 <waterUps>.get(0) <waterDowns>.get(0) <waterHots>.get(0) 时间为00:00 0除于4 得 0 整除 <points>.get(4) 填充 <waterUps>.get(1) <waterDowns>.get(1) <waterHots>.get(1) 时间为01:00 4除于4 得 1 整除 <points>.get(8) 填充 <waterUps>.get(2) <waterDowns>.get(2) <waterHots>.get(2) 时间为02:00 8除于4 得 1 整除 因此对应代码为 for(int i=0;i<points.size();i++) { if(i%4==0)//判断能否被4整除 { 填充 waterUps.get(i/4) 对应数据 填充 waterDowns.get(i/4) 对应数据 填充 waterHots.get(i/4) 对应数据 } }

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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