日期:2014-05-20  浏览次数:20739 次

Comparator比较器的实现
import java.util.Arrays;
import java.util.Comparator;

public class SampleComparator implements Comparator {

  public int compare(Object o1, Object o2) {
    return toInt(o1) - toInt(o2);
  }

  private int toInt(Object o) {
    String str = (String) o;
    str = str.replaceAll("一", "1");
    str = str.replaceAll("二", "2");
    str = str.replaceAll("三", "3");
    // 
    return Integer.parseInt(str);
  }

  /**
   * 测试方法
   */
  public static void main(String[] args) {
    String[] array = new String[] { "一二", "三", "二" };
    Arrays.sort(array, new SampleComparator());
    for (int i = 0; i < array.length; i++) {
      System.out.println(array[i]);
    }
  }

}

上面是怎样实现compare函数重写的,尤其没看懂toInt函数,这个函数的作用是什么?大家看看谁懂,讲讲呗,呵呵。

------解决方案--------------------
Comparator返回3种值分别代表>,<,=
然后sort方法需要传入待排序数组,以及可用于该数组的比较器两个参数
toInt函数不就是将中文数字换成阿拉伯数字的字符串么,然后parseint才能转出来,才能计算啊……
------解决方案--------------------
  private int toInt(Object o) {
    String str = (String) o;
    str = str.replaceAll("一", "1");
    str = str.replaceAll("二", "2");
    str = str.replaceAll("三", "3");
    // 
    return Integer.parseInt(str);
  }

replaceAll("一","1");
将你字符串里所有的一 变成  1;
下面的都是如此。
也就是说,你的字符串是"一二三二二三"
经过这个操作之后,就会变成 "123223"

然后再用Integer.parseInt(str); 将字符串"123223" 变成  数字 123223;