Bagを実装するサンプル
HashBagを参考にBeanBagを実装。
機能としては、Listに格納されたBeanの指定したメンバを集計するだけです。
材料はこの辺り
org.apache.commons.beanutils
org.apache.commons.collections
org.apache.commons.lang
/** * * 実行 * @throws Exception 例外 */ public void execute() throws Exception { final List<Hoge> list = new ArrayList<Hoge>(); while(list.size() < 100) { final Hoge hoge = new Hoge(); hoge.setHoge(String.valueOf(RandomUtils.nextInt(5))); list.add(hoge); } final Bag bag = new BeanBag(list,"hoge"); for(Object object : bag.uniqueSet()) { System.out.println(String.valueOf(object) + ":" + bag.getCount(String.valueOf(object)) + "個"); } } /** * * <HR> * <P> * ■モジュール名 <BR> * <BLOCKQUOTE> * BeanBag.java <BR> * </BLOCKQUOTE> * <P> * ■クラス仕様 <BR> * <BLOCKQUOTE> * BeanBagクラスはBagの実装クラスです。<BR> * </BLOCKQUOTE> * <P> * <HR> * <P> */ public static class BeanBag extends AbstractMapBag implements Bag, Serializable { /** * シリアル番号 */ private static final long serialVersionUID = 5186602832852100419L; /** * * コンストラクタ。 * @param coll コレクション * @param propertyName プロパティ名 * @throws IllegalAccessException 例外 * @throws InvocationTargetException 例外 * @throws NoSuchMethodException 例外 */ public BeanBag(Collection coll, String propertyName) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException { this(); for (final Object object : coll) { add(BeanUtils.getProperty(object, propertyName)); } } /** * * デフォルトコンストラクタ */ private BeanBag() { super(new HashMap()); } /** * Write the bag out using a custom routine. */ private void writeObject(ObjectOutputStream out) throws IOException { out.defaultWriteObject(); super.doWriteObject(out); } /** * Read the bag in using a custom routine. */ private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException { in.defaultReadObject(); super.doReadObject(new HashMap(), in); } } /** * * <HR> * <P> * ■モジュール名 <BR> * <BLOCKQUOTE> * Hoge.java <BR> * </BLOCKQUOTE> * <P> * ■クラス仕様 <BR> * <BLOCKQUOTE> * Hogeクラスは確認用クラスです。<BR> * </BLOCKQUOTE> * <P> * <HR> * <P> */ public static class Hoge { /** * 確認用文字列 */ private String hoge; /** * * 確認用文字列の取得 * @return 確認用文字列 */ public String getHoge() { return hoge; } /** * * 確認用文字列の設定。 * @param hoge 確認用文字列 */ public void setHoge(String hoge) { this.hoge = hoge; } }