Java中定制比较器

来源:互联网 发布:web安全扫描软件 编辑:程序博客网 时间:2024/06/09 22:22

当需要进行比较而默认的比较方式不满足我们的需求时,可以自己写比较器。

class ComparatorName implements Comparator<T> {    //按照需求写比较器方法    public int compare(T t1, T t2) {    }}

华为机试题:错误纪录功能

import java.io.*;import java.util.*;public class Main {    public static void main(String[] args) throws IOException{        Scanner in = new Scanner(System.in);        List<String> list = new ArrayList<>();        List<List<String>> result = new ArrayList<>();        while(in.hasNext()) {            String tempFilename = in.next();            int lineNum = in.nextInt();            in.nextLine();            String[] arr = tempFilename.split("\\\\");            String filename = arr[arr.length - 1];            String input = filename + " " + lineNum;            if(!list.contains(input)) {                list.add(input);                List<String> temp = new ArrayList<>();                temp.add(input);                temp.add(1 + "");                result.add(temp);            } else {                Iterator<List<String>> iterator = result.iterator();                while(iterator.hasNext()) {                    List<String> temp = iterator.next();                    if(input.equals(temp.get(0))) {                        int count = Integer.parseInt(temp.get(1));                        count++;                        temp.set(1, count + "");                    }                }            }        }        in.close();        String[] resultArr = new String[result.size()];        int j = 0;        for(List<String> e : result) {            String sName = e.get(0).split(" ")[0];            if(sName.length() > 16) {                sName = sName.substring(sName.length() - 16);                String lNum = e.get(0).split(" ")[1];                resultArr[j++] = sName + " " + lNum + " " + e.get(1);                continue;            }            resultArr[j++] = e.get(0) + " " + e.get(1);        }        sort(resultArr, new StringComparator());       //根据出现次数进行递减排序        if(resultArr.length <= 8)         //输出结果            for(String e : resultArr)                System.out.println(e);        else {            for(int i = 0; i < 8; i++)                System.out.println(resultArr[i]);        }    }    public static void sort(String[] s, Comparator<String> cmp) {        int j;        for(int i = 1; i < s.length; i++) {            String temp = s[i];            for(j = i; j > 0 && cmp.compare(temp, s[j - 1]) > 0; j--)                s[j] = s[j - 1];            s[j] = temp;        }    }}/* * 定制比较器 */class StringComparator implements Comparator<String> {    public int compare(String s1, String s2) {        int lastSubStr1 = Integer.parseInt(s1.split(" ")[s1.split(" ").length - 1]);        int lastSubStr2 = Integer.parseInt(s2.split(" ")[s2.split(" ").length - 1]);        return lastSubStr1 - lastSubStr2;    }}
0 0