房地产项目中的一段代码, 室号按从高层到低层排列
现在有 List<String> s = ("10", "20", "30", "40", "B01", "B03", "B02");
我要结果为  40  30  20  10  B01 B02 B03  输出 请问如何编写代码.

解决方案 »

  1.   

    Comparer(),自己定义排序规则
      

  2.   

    可参考此例:
    http://blog.csdn.net/lcllcl987/archive/2005/06/27/405112.aspx
      

  3.   

    我实现了一部分, 但结果希望如下:  10   02
    09   01
    09   02
    B01   01
    B01   02
    B02   02package test;import java.text.DecimalFormat;
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Comparator;
    import java.util.List;public class Test {
    public static void main(String[] args) {
    List<House> houses = new ArrayList<House>();
    House r1 = new House("10", "02");
    House r2 = new House("09", "02");
    House r3 = new House("09", "01");
    House r4 = new House("B01", "01");
    House r5 = new House("B02", "02");
    House r6 = new House("B01", "02");

    houses.add(r1);
    houses.add(r2);
    houses.add(r3);
    houses.add(r4);
    houses.add(r5);
    houses.add(r6);

    for(House h: houses) 
    System.out.println(h.getFloor() + "   " +h.getRoom());

    Collections.sort(houses, new HouseComparator());

    System.out.println();

    for(House h: houses) 
    System.out.println(h.getFloor() + "   " +h.getRoom());

    }
    class House{
    private String floor;
    private String room;

    public House(String f, String r) {
    this.floor = f;
    this.room = r;
    }
    public String getFloor() {
    return floor;
    }
    public void setFloor(String floor) {
    this.floor = floor;
    }
    public String getRoom() {
    return room;
    }
    public void setRoom(String room) {
    this.room = room;
    }
    }class HouseComparator implements Comparator {
    public int compare(Object o1, Object o2) {
    String floor01 = ((House) o1).getFloor();
    String floor02 = ((House) o2).getFloor();
    int cc = (floor01).compareTo(floor02);
    if (cc < 0) {
    return 1;
    } else if (cc > 0) {
    return -1;
    } else if (cc == 0) { // 同floor
    String number01 = ((House) o1).getRoom();
    String number02 = ((House) o2).getRoom();
    cc = (number01).compareTo(number02);
    return (cc < 0 ? -1 : cc > 0 ? 1 : 0); // 顺序
    }
    return 0;
    }
    }
      

  4.   

    试试这个:
    class SortArray
    {
    public static void Sort(String [] xx)
    {
    int Ucount,Bcount;
    Ucount=0;
    Bcount=0;
    for(int i=0;i<xx.length;i++)
    {
    if (xx[i].indexOf("B")!=-1)
    {
    Bcount++;
    }
    else
    {
    Ucount++;

    }

    String [] Uxx = new String[Ucount];
    String [] Bxx = new String[Bcount];
     
    for(int i=0,j=0,k=0;i<xx.length;i++)
    {
    if (xx[i].indexOf("B")!=-1)
    {
    Bxx[j]=xx[i];
    j++;
    }
    else
    {
      Uxx[k]=xx[i];
      k++;
     } 
    }
    sortBegin(Uxx);
    sortBegin(Bxx);
    printArray(Uxx);
    printArray(Bxx);

    }
    // 打印数组
    public static void printArray(String [] yy)
    {
    for(int n=0;n<yy.length;n++)
    System.out.println("第"+n+"="+yy[n]);
    }
    // 排序数组
    public static void sortBegin(String [] mm)
    {
    String temp=null;
    String temp1=null;
    for(int n=0;n<mm.length-1;n++)
    {
    if (mm[n]!=null &&mm[n+1]!=null&& mm[n].indexOf("B")!=-1)
    {
    temp=mm[n].replace('B','0');
    temp1=mm[n+1].replace('B','0');
    if(Integer.parseInt(temp)>Integer.parseInt(temp1))
    {
    temp = mm[n];
    mm[n] = mm[n+1];
    mm[n+1] =temp;
    }
    }
    else
    {
    if(Integer.parseInt(mm[n])<Integer.parseInt(mm[n+1]))
    {
    temp = mm[n];
    mm[n] = mm[n+1];
    mm[n+1] =temp;
    }
    }
    }
    }



    public static void main(String [] args)
    {
    String [] yy = {"01","09","B01","B06","08","B04","04"};
    Sort(yy);
    }
    }
      

  5.   

    自己完成了, 不过还是要感谢各位的帮助, 多谢了.package test;import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Comparator;
    import java.util.List;public class Test {
    @SuppressWarnings("unchecked")
    public static void main(String[] args) {
    List<House> houses = new ArrayList<House>();
    House r1 = new House("10", "02");
    House r2 = new House("09", "02");
    House r3 = new House("09", "01");
    House r4 = new House("B01", "01");
    House r5 = new House("B02", "02");
    House r6 = new House("B01", "02");

    houses.add(r1);
    houses.add(r2);
    houses.add(r3);
    houses.add(r4);
    houses.add(r5);
    houses.add(r6); for(House h: houses) 
    System.out.println(h.getFloor() + "   " +h.getRoom());

    List<House> houses_s = new ArrayList<House>();
    for(int i = houses.size()-1 ; i>=0; i--) {
    House h = houses.get(i);
    int c = h.getFloor().charAt(0);
    if(!(c>='0' && c<='9')) {
    houses_s.add(h);
    houses.remove(h);
    }
    }

    Collections.sort(houses, new HouseComparator_D());

    if(houses_s.size() >0) {
    Collections.sort(houses_s, new HouseComparator_U());
    }

    houses.addAll(houses_s);

    System.out.println();

    for(House h: houses) 
    System.out.println(h.getFloor() + "   " +h.getRoom());

    }
    class House{
    private String floor;
    private String room;

    public House(String f, String r) {
    this.floor = f;
    this.room = r;
    }
    public String getFloor() {
    return floor;
    }
    public void setFloor(String floor) {
    this.floor = floor;
    }
    public String getRoom() {
    return room;
    }
    public void setRoom(String room) {
    this.room = room;
    }
    }class HouseComparator_D implements Comparator {
    public int compare(Object o1, Object o2) {
    String floor01 = ((House) o1).getFloor();
    String floor02 = ((House) o2).getFloor();
    int cc = (floor01).compareTo(floor02);
    if (cc < 0) {
    return 1;
    } else if (cc > 0) {
    return -1;
    } else if (cc == 0) { // 同floor
    String number01 = ((House) o1).getRoom();
    String number02 = ((House) o2).getRoom();
    cc = (number01).compareTo(number02);
    return (cc < 0 ? -1 : cc > 0 ? 1 : 0); // 顺序
    }
    return 0;
    }
    }
    class HouseComparator_U implements Comparator {
    public int compare(Object o1, Object o2) {
    String floor01 = ((House) o1).getFloor();
    String floor02 = ((House) o2).getFloor();
    int cc = (floor01).compareTo(floor02);
    if (cc < 0) {
    return -1;
    } else if (cc > 0) {
    return 1;
    } else if (cc == 0) { // 同floor
    String number01 = ((House) o1).getRoom();
    String number02 = ((House) o2).getRoom();
    cc = (number01).compareTo(number02);
    return (cc < 0 ? -1 : cc > 0 ? 1 : 0); // 顺序
    }
    return 0;
    }
    }