Java list集合

clandeai 2017-05-18 10:50:28

拿到如图所示的一个list集合,x,y为坐标,请问如何拿到i_record_id相同的xy值分组,比如i_record_id为1对应的所有xy,为2对应的所有xy,再把每个id对应的所有xy求出距离后的里程和i_record_id相对应放入一个集合呢。
...全文
176 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
很叼么 2017-05-18
  • 打赏
  • 举报
回复
引用 2 楼 clandeai 的回复:
引用 1 楼 Hendiaome 的回复:
sql?t group by i_record_id,x,y啊
sql查出来的xy坐标要算互相两个最近点距离的和的,分组的话没有可以算坐标距离的函数把,
t group by i_record_id,x*x+y*y开方
clandeai 2017-05-18
  • 打赏
  • 举报
回复
引用 1 楼 Hendiaome 的回复:
sql?t group by i_record_id,x,y啊
sql查出来的xy坐标要算互相两个最近点距离的和的,分组的话没有可以算坐标距离的函数把,
很叼么 2017-05-18
  • 打赏
  • 举报
回复
sql?t group by i_record_id,x,y啊
clandeai 2017-05-18
  • 打赏
  • 举报
回复
引用 6 楼 qq_35209952 的回复:
懒得多想.. sort一下慢慢判断就是. 反正你啥都要
多谢回答,问题解决了
clandeai 2017-05-18
  • 打赏
  • 举报
回复
引用 5 楼 u012934325 的回复:
你可以先求出每个record_id的xy距离,然后new HashMap,key存record_id,value存yx距离
多谢回答,问题解决了
clandeai 2017-05-18
  • 打赏
  • 举报
回复
引用 4 楼 dong_19890208 的回复:
我的理解楼主是要求i_record_id相同,所有相邻时间点的点之间的距离之和 首先查询列表的时候按照i_record_id,time排序 数据对应的数据结构 public class Record{ int x; int y; Date time; int i_record_id; int iuser_id; int name; } List<Record> list = getRecordsOrderByRecordIdAndTime(); // 按照i_record_id 分组,每个分组记录已经按时间排序 Map<Integer,list<Record>> map = new HashMap<>(); for(Record record:list){ List <Record> tmp; int key =record.getIRecordId(); if(map.contains(key){ tmp=map.get(key); }else{ tmp=new ArrayList<>(); map.put(key,tmp); } tmp.add(record); } // 计算距离并保存 Map<Integer,Float> resultMap = new HashMap<>(); Iterator it = map.entrySet().iterator() while(it.hasNext()){ Entry entry = it.next; List<Record> value = entry.value(); float distance = 0.0; for(int i=0;i<value.size()-1){ distance += distance(value.get(i),value.get(i+1)); } resultMap.put(entry.key(),distance); }
多谢多谢,现在这个问题也解决了,基本用的也是层主这种方法,根据recordid放入xy,遍历value的list算出总和,在放入新list
逗泥丸的平方 2017-05-18
  • 打赏
  • 举报
回复
懒得多想.. sort一下慢慢判断就是. 反正你啥都要
墨笙弘一 2017-05-18
  • 打赏
  • 举报
回复
你可以先求出每个record_id的xy距离,然后new HashMap,key存record_id,value存yx距离
dong_19890208 2017-05-18
  • 打赏
  • 举报
回复
我的理解楼主是要求i_record_id相同,所有相邻时间点的点之间的距离之和 首先查询列表的时候按照i_record_id,time排序 数据对应的数据结构 public class Record{ int x; int y; Date time; int i_record_id; int iuser_id; int name; } List<Record> list = getRecordsOrderByRecordIdAndTime(); // 按照i_record_id 分组,每个分组记录已经按时间排序 Map<Integer,list<Record>> map = new HashMap<>(); for(Record record:list){ List <Record> tmp; int key =record.getIRecordId(); if(map.contains(key){ tmp=map.get(key); }else{ tmp=new ArrayList<>(); map.put(key,tmp); } tmp.add(record); } // 计算距离并保存 Map<Integer,Float> resultMap = new HashMap<>(); Iterator it = map.entrySet().iterator() while(it.hasNext()){ Entry entry = it.next; List<Record> value = entry.value(); float distance = 0.0; for(int i=0;i<value.size()-1){ distance += distance(value.get(i),value.get(i+1)); } resultMap.put(entry.key(),distance); }

50,523

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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