Java中定制比较器

    xiaoxiao2021-04-11  45

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

    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; } }
    转载请注明原文地址: https://ju.6miu.com/read-667007.html

    最新回复(0)