Predicate 見直し

以前、Google collection Library に感動したことを下記の投稿のとおり書いたが、

http://blog.zaq.ne.jp/oboe2uran/article/258/

ここで書いた、Collections2filter や、transform の実行は、対象 Collection に値を
追加する前に記述しても良い!!(あくまでも記述=定義であって実行ではない)
もう一度、サンプルを書くなら

SimpleDateFormat sf = new SimpleDateFormat("yyyy/MM/dd");

Set<User> userset = new TreeSet<User>();

// Collections2.filter で抽出
Collection<User> ua = Collections2.filter(
   userset
  ,new Predicate<User>(){
      @Override
      public boolean apply(User u){
         return u.point > 10 ? true : false;
      }
   }
);
// Collections2.transform で、name を抽出
Collection<String> unames = Collections2.transform(
   ua
  ,new Function<User,String>(){
      @Override
      public String apply(User u){
         return u.name;
      }
   }
);
Collection<String> unames2 = Collections2.transform(
   Collections2.filter(
     userset
     ,new Predicate<User>(){
        @Override
        public boolean apply(User u){
           return u.point > 10 ? true : false;
        }
      }
   )
   ,new Function<User,String>(){
        @Override
        public String apply(User u){
          return u.name;
        }
    }
);
Collection<String> unames3 = Collections2.transform(
   userset
   ,new Function<User,String>(){
       @Override
       public String apply(User u){
          return u.name;
            }
       }
);

//
userset.add(new User("aaa",sf.parse("2009/08/21"),10));
userset.add(new User("bbb",sf.parse("2009/08/11"),12));
userset.add(new User("ccc",sf.parse("2009/08/14"),18));
userset.add(new User("ddd",sf.parse("2009/08/25"),7));
userset.add(new User("eee",sf.parse("2009/08/12"),21));

for(User u : ua){
   System.out.println(u.name+"\t"+sf.format(u.entrydate)+"\t"+u.point);
}
System.out.println("------------");
for(String s : unames){
   System.out.println(s);
}
System.out.println("------------");
for(String s : unames2){
   System.out.println(s);
}
System.out.println("------------");
for(String s : unames3){
   System.out.println(s);
}
===============================
import java.util.Date;

public class User implements Comparable<User>{
   public String name;
   public Date entrydate;
   public Integer point;
   public User(String name,Date entrydate,int point){
      this.name = name;
      this.entrydate = entrydate;
      this.point = point;
   }
   @Override
   public int compareTo(User u){
      return this.entrydate.compareTo(u.entrydate) >= 0 ? 1 : -1;
   }
}