package cdstore;import org.apache.commons.beanutils.BeanUtils;import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;public class StoreManagerDelegate implements java.io.Serializable {  private static int index = 0;  private List list = new ArrayList();
  private Map categories = new TreeMap();
  private Map cdMap = new HashMap();
  private String sortByProperty = "title";  private transient final Comparator propertyAscendingComparator = new Comparator() {
  
    public int compare(Object object1, Object object2) {
      try {
        String property1 = BeanUtils.getProperty(object1,StoreManagerDelegate.this.sortByProperty);
        String property2 = BeanUtils.getProperty(object2, StoreManagerDelegate.this.sortByProperty);
        return property1.toLowerCase().compareTo(property2.toLowerCase());
      }
      catch (Exception e) {
        return 0;
      }
    }
  };  private transient final Comparator propertyDescendingComparator = new
      Comparator() {
    public int compare(Object object1, Object object2) {
      try {
        String property1 = BeanUtils.getProperty(object1, StoreManagerDelegate.this.sortByProperty);
        String property2 = BeanUtils.getProperty(object2, StoreManagerDelegate.this.sortByProperty);
        return property2.toLowerCase().compareTo(property1.toLowerCase());
      }
      catch (Exception e) {
        return 0;
      }
    }
  };  private List countryCategory = new ArrayList();
  private List rAndBCategory = new ArrayList();
  private List rockCategory = new ArrayList();  { //实例初始化器用于生成一些示例数据
    countryCategory.add("兰草");
    countryCategory.add("西方古典音乐");
    countryCategory.add("西方流行音乐");
    categories.put("西部乡村音乐", countryCategory);    rockCategory.add("现代音乐");
    rockCategory.add("古典音乐");
    categories.put("摇滚", rockCategory);    rAndBCategory.add("灵魂音乐");
    rAndBCategory.add("击打乐");
    rAndBCategory.add("底特律黑人音乐");
    categories.put("蓝调音乐", rAndBCategory);    addCD(new CD("Staying Alive", "Beegees", 15.89f, "西部乡村音乐"));
    addCD(new CD("Born in USA", "Bruce", 19.89f, "摇滚"));
    addCD(new CD("Love Bites", "Def Lappard", 12.89f, "摇滚"));
    addCD(new CD("Great Big Sea", "Great Big Sea", 8.39f, "摇滚"));
    addCD(new CD("1984", "Van Halen", 8.39f, "摇滚"));
    addCD(new CD("Dancing Queen", "ABBA", 8.39f, "摇滚"));
    addCD(new CD("Love Gun", "KISS", 8.39f, "摇滚"));
    addCD(new CD("Daddy Cool", "BoneyM", 8.39f, "摇滚"));
    addCD(new CD("I missed the bus", "Skank and Pickle", 8.39f, "摇滚"));
    addCD(new CD("Is My Life", "Dr. Alban", 8.39f, "西部乡村音乐"));
    addCD(new CD("Every Breath You Take", "Police", 15.89f, "西部乡村音乐"));
  }  public CD getCDById(Long id) {
    return (CD) cdMap.get(id);
  }  public List getCategories() {
    return new ArrayList(categories.keySet());
  }  public List getSubcategories(String category) {
    return (List) categories.get(category);
  }  public void addCD(CD cd) {
    cd.setId(new Long(index++));
    list.add(cd);
    cdMap.put(cd.getId(), cd);
  }  public List findArtistAsc() {
    sortByProperty = "artist";
    sort(propertyAscendingComparator);
    return list;
  }  public List findArtistDec() {
    sortByProperty = "artist";
    sort(propertyDescendingComparator);
    return list;
  }  public List findTitleAsc() {                                             // 返回所有的数据
    sortByProperty = "title";
    sort(propertyAscendingComparator);
    return list;
  }  public List findTitleDec() {
    sortByProperty = "title";
    sort(propertyDescendingComparator);
    return list;
  }  public CD readCD(int id) {
    CD cd = (CD)this.list.get(id);
    return cd;
  }  public void updateCD(CD cd) {
    //
  }  private void sort(Comparator comparator) {
    Collections.sort(list, comparator);
  }
}
JSF 技术:::::问题:
 该方法findTitleAsc()  是返回一个List ,  这个对象看不懂,他在这有什么用,还有它里面的方法是那掉的,怎么会返回数据呢? 哈哈 对不起啊 一点也看不东这,  请大家给解释一下,
private transient final Comparator propertyAscendingComparator = new Comparator() {
  
    public int compare(Object object1, Object object2) {
      try {
        String property1 = BeanUtils.getProperty(object1,StoreManagerDelegate.this.sortByProperty);
        String property2 = BeanUtils.getProperty(object2, StoreManagerDelegate.this.sortByProperty);
        return property1.toLowerCase().compareTo(property2.toLowerCase());
      }
      catch (Exception e) {
        return 0;
      }
    }
  };

解决方案 »

  1.   


    String property1 = BeanUtils.getPropert(object1,StoreManagerDelegate.this.sortByProperty);StoreManagerDelegate.this.sortByProperty表示在StoreManagerDelegate类中定义的sortByProperty表示的值.在object1对象中,取名字为StoreManagerDelegate.this.sortByProperty提供的属性值,再赋给property1 .对object1,object2比较字符串大小
      

  2.   

    private void sort(Comparator comparator) {
        Collections.sort(list, comparator);
      }
    }
     comparator实例的public int compare(Object o1,Object o2)方法比较o1,o2在第一个参数集合list的先后顺序 public List findTitleAsc() {                                             // 返回所有的数据
        sortByProperty = "title";    //设置propertyAscendingComparator实例的compare(Object o1,Object o2)方法比较 o1,o2的哪个属性
        sort(propertyAscendingComparator);
        return list;                 //返回排序后的list
      }