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

小弟求助java泛型题目
自定义服装类,在GenericGroup中存放一批服装,并按服装的价格排序
提示:在GenericGroup中增加排序的方法:public void sort(Comparator<? super T> c),
调用Arrays中的public static <T> void sort(T[] a,
  Comparator<? super T> c) 方法对其中的数组进行排序。

------解决方案--------------------
Java code

import java.util.Arrays;
import java.util.Comparator;

public class GenericGroup {

    FuZhuang[] fzList;

    public void sort(Comparator<? super FuZhuang> c) {
        Arrays.sort(fzList, c);
    }

    public static void main(String[] args) {
        new GenericGroup().sort(new FZComparator());
    }

}

class FuZhuang {
    int size;

    public FuZhuang(int size) {
        super();
        this.size = size;
    }
}

class FZComparator implements Comparator<FuZhuang> {

    @Override
    public int compare(FuZhuang o1, FuZhuang o2) {
        return o1.size - o2.size;
    }

}

------解决方案--------------------
不知道你要找的是不是这个
Java code

import java.lang.reflect.InvocationTargetException;

import java.lang.reflect.Method;

import java.util.Collections;

import java.util.Comparator;

import java.util.List;

/**

 * 

 * @author XXX

 * @E-mail monkey_ye@qq.com

 * @创建时间 2011-7-20

 * @param <E>

 */

public class SortList<E> {

    /**

     * 根据对象的相关属性对对象List进行排序

     * @param list 需要排序的list

     * @param method 排序的属性

     * @param sort 排序的方式,desc/asc

     * 例如:sortList.Sort(adt, "getVal", "desc");

     */

    @SuppressWarnings({ "unchecked", "rawtypes" })

    public  void Sort(List<E> list, final String method, final String sort){  

        Collections.sort(list, new Comparator() {             

            public int compare(Object a, Object b) {  

                int ret = 0;  

                try{  

                    Method m1 = ((E)a).getClass().getMethod(method, null);  

                    Method m2 = ((E)b).getClass().getMethod(method, null);  

                    if(sort != null && "desc".equals(sort))//倒序  

                        ret = m2.invoke(((E)b), null).toString().compareTo(m1.invoke(((E)a), null).toString());   

                    else//正序  

                        ret = m1.invoke(((E)a), null).toString().compareTo(m2.invoke(((E)b), null).toString());  

                }catch(NoSuchMethodException ne){  

                    System.out.println(ne);  

                }catch(IllegalAccessException ie){  

                    System.out.println(ie);  

                }catch(InvocationTargetException it){  

                    System.out.println(it);  

                }  

                return ret;  

            }  

         });  

    }  

 

 

}

------解决方案--------------------
供参考:
Java code

import java.util.*;

class Clothing
{
    String     brand = null;
    int price = 0;
    
    public Clothing(String brand, int price)
    {
        this.brand = brand;
        this.price = price;    
    }
    
    @Override
    public String toString()
    {
        return this.brand+"-"+this.price;    
    }
}

class GenericGroup
{
    public static void main(String[] args) 
    {    
        GenericGroup gc = new GenericGroup();
        
        gc.sort(new Comparator<Clothing>(){
            @Override
            public int compare(Clothing c1, Clothing c2)
            {
                if(c1.price>c2.price)
                {
                    return 1;    
                }
                else if(c1.price<c2.price)
                {
                        return -1;        
                }
                return 0;
            }
            });
    }
    
    public void sort(Comparator<? super Clothing> c)
    {
        Clothing [] clothing = new Clothing[]{new Clothing("361",500),new Clothing("addi",2500),new Clothing("john",1500)};    
        Arrays.sort(clothing,c);
        
        for(Clothing clo: clothing)
        {
            System.out.println(clo);    
        }
    }

}