实现comparator接口,进行排序

时间:2021-07-20 02:51:41
项目中,常常需要排序,可能根据各种条件排序,这里记录一种,根据json数据中成人价格和成人税费的总和按照从小打到的顺序排列。贴上代码,应该很好懂。

@RequestMapping("/sortJson")
@ResponseBody
public List<JSONObject> sortJson(HttpServletResponse response){

    String jsonStr=getFileContentByAddress("文件所在路径\\json.txt");
    JSONObject jsonObj=JSONObject.parseObject(jsonStr);
    JSONArray routings=jsonObj.getJSONArray("routings");
    List<JSONObject> list=new ArrayList<>();
    for (int i = 0; i < routings.size(); i++) {
        list.add(routings.getJSONObject(i));
    }
   Comparator<JSONObject> comparator=new Comparator<JSONObject>() {
        @Override
        public int compare(JSONObject o1, JSONObject o2) {
            return (o1.getInteger("adultPrice")+o1.getInteger("adultTax"))-(o2.getInteger("adultPrice")+o2.getInteger("adultTax"));
        }
    };
    Collections.sort(list,comparator);
    //   设置response的ContentType解决中文乱码
    //response.setContentType("text/html;charset=UTF-8");
    return list;
}

public static String getFileContentByAddress(String url){

    if(isNullOrEmpty(url)){

        throw new NullPointerException("获取文件内容地址为空!");

    }

    File file = new File(url);

    String content = getFileContentByFile(file);

    return content;
}

public static boolean isNullOrEmpty(String str) {
    boolean flag = false;
    if (str == null || "".equals(str)) {
        flag = true;
    }
    return flag;
}

public static String getFileContentByFile(File file){

    BufferedReader br=null;
    StringBuffer  buffer = new StringBuffer();
    try {

        br = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8"));
        String line="";

        while((line=br.readLine())!=null){
            buffer.append(line);
        }
    } catch (FileNotFoundException e) {

        e.printStackTrace();

    } catch (UnsupportedEncodingException e) {

        e.printStackTrace();

    } catch (IOException e) {

        e.printStackTrace();

    } finally{

        try {

            br.close();

        } catch (IOException e) {

            e.printStackTrace();
        }
    }

    return buffer.toString();
}
期间遇到一个乱码的问题,原因是文件的编码格式与输入流的格式没有一致,所以,导致中文乱码。设置成utf-8,问题解决。