Java 按值排序hashMap并返回列表
我试图找到一个基于距离的排序列表。(从最低到最高) 餐厅和客户在数据库中有lat和lng。我从数据库中获取它们,并对它们进行比较,然后尝试显示最接近客户的餐厅列表 这是我的密码Java 按值排序hashMap并返回列表,java,sorting,Java,Sorting,我试图找到一个基于距离的排序列表。(从最低到最高) 餐厅和客户在数据库中有lat和lng。我从数据库中获取它们,并对它们进行比较,然后尝试显示最接近客户的餐厅列表 这是我的密码 //ALGORITHOM public ArrayList<String> displayNearestRestaurant(String customerId) throws SQLException{ //arraylist variable ArrayList<
//ALGORITHOM
public ArrayList<String> displayNearestRestaurant(String customerId) throws SQLException{
//arraylist variable
ArrayList<String> restaurantList = new ArrayList<String>();
//array to store all distance
ArrayList<Map<String, String>> distanceList = new ArrayList<Map<String, String>>();
//grab customerId
Customer ob = new Customer();
//find lat and lng
String latStr =ob.getCustomerLat(customerId);
String lngStr =ob.getCustomerLng(customerId);
//convert to double
double customerLat = Double.parseDouble(latStr);
double customerLng = Double.parseDouble(lngStr);
//ok we found customer lat and lng
//now start loop and all restaurants available
con = new DBconnection().Connect(); //connects the db
Statement st = con.createStatement();
query = "SELECT * FROM restauranttable";
rs = st.executeQuery(query);
//starting loop
while (rs.next()) {
String restaurantId = rs.getString("restaurant_id");
String dbLatStr = rs.getString("lat");
double dbLat = Double.parseDouble(dbLatStr);
String dbLngStr = rs.getString("lng");
double dbLng = Double.parseDouble(dbLngStr);
//this.CalculateDistance(customerLat, customerLng, dbLat, dbLng, "M");
double dist = calculateDistance.distance(customerLat, customerLng, dbLat, dbLng, "M");
//double to string conversion
String strDist = Double.toString(dist);
// insert restaurantId and its distance against the customer position in a array
Map<String, String> distanceL = new HashMap<String, String>();
distanceL.put("restaurantId", restaurantId);
distanceL.put("distance",strDist);
distanceList.add(distanceL);
//I am lost at this point
}
con.close();
//now distanceList has all distance and restaurant id stored...
// now process the distanceList restaurant id and and value
//find add to the restaurant to the list which has smallest value
//now check the distanceL list
return restaurantList;
}
//算法
公共ArrayList displayNearestRestaurant(字符串customerId)引发SQLException{
//arraylist变量
ArrayList restaurantList=新建ArrayList();
//存储所有距离的数组
ArrayList distanceList=新建ArrayList();
//抓取客户ID
客户ob=新客户();
//查找lat和lng
字符串latStr=ob.getCustomerLat(customerId);
字符串lngStr=ob.getCustomerLng(customerId);
//转换为双精度
double customerLat=double.parseDouble(latStr);
double customerLng=double.parseDouble(lngStr);
//好的,我们找到了客户lat和lng
//现在开始循环,所有餐厅都可用
con=new DBconnection().Connect();//连接数据库
语句st=con.createStatement();
query=“从restauranttable中选择*”;
rs=st.executeQuery(查询);
//起动回路
while(rs.next()){
String restaurantId=rs.getString(“餐厅id”);
String dbLatStr=rs.getString(“lat”);
double dbLat=double.parseDouble(dbLatStr);
字符串dbLngStr=rs.getString(“lng”);
double dbLng=double.parseDouble(dbLngStr);
//此。计算状态(customerLat、customerLng、dbLat、dbLng,“M”);
双距离=计算距离距离(customerLat、customerLng、dbLat、dbLng,“M”);
//双精度到字符串转换
字符串strDist=Double.toString(dist);
//在阵列中插入restaurantId及其相对于客户位置的距离
Map distanceL=new HashMap();
距离放置(“restaurantId”,restaurantId);
距离放置(“距离”,标准);
距离列表。添加(距离);
//我在这一点上迷路了
}
con.close();
//现在distanceList已存储所有距离和餐厅id。。。
//现在处理distanceList餐厅id和值
//在列表中找到价值最小的餐厅
//现在检查距离列表
返回餐厅列表;
}
现在,正如您所看到的,distanceList假定包含餐厅id和距离。我不知道如何对它们进行排序,并根据从最低到最高的距离返回restaurantList。请帮我弄清楚这一点您实际上无法对
HashMap
进行排序。请考虑使用其他的数据结构(如<代码> LinkedHashMap <代码>)。请用相同的代码……演示它是如何做的……)如果不创建一个不同的数据结构,你就无法直接实现。那么linkedHashMap是解决方案吗?