Java 按值排序hashMap并返回列表

Java 按值排序hashMap并返回列表,java,sorting,Java,Sorting,我试图找到一个基于距离的排序列表。(从最低到最高) 餐厅和客户在数据库中有lat和lng。我从数据库中获取它们,并对它们进行比较,然后尝试显示最接近客户的餐厅列表 这是我的密码 //ALGORITHOM public ArrayList<String> displayNearestRestaurant(String customerId) throws SQLException{ //arraylist variable ArrayList<

我试图找到一个基于距离的排序列表。(从最低到最高) 餐厅和客户在数据库中有lat和lng。我从数据库中获取它们,并对它们进行比较,然后尝试显示最接近客户的餐厅列表

这是我的密码

//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是解决方案吗?