以前、Google collection Library に感動したことを下記の投稿のとおり書いたが、
http://blog.zaq.ne.jp/oboe2uran/article/258/
ここで書いた、Collections2 の filter や、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;
}
}