LoginSignup
2
1

More than 3 years have passed since last update.

【Java】オブジェクトリスト (Collection) のプロパティ存在チェック

Posted at

オブジェクトリストのプロパティの値をチェックしたい

・毎回 For とかで回すのがめんどい
・汎用的に使えるようにジェネリクスを利用
・static にして jstl (jsp) でも手軽に使えるように

チェック用関数

なんちゃらUtilsなどのクラスに作成(下記では ThisUtils)
・T1: リストに入ってるオブジェクトのクラス
・methodName: オブジェクトの値を取り出すためのメソッド名(例: getValue)
・T2 val: リストに入ってるオブジェクトの値をチェックするためのオブジェクト (例:getValue と比較する値)

    @SuppressWarnings("unchecked")
    public static <T1,T2> boolean isCollectionPropertyContains(Collection<T1> list,
            String methodName, T2 val) {

        Logger logger = LoggerFactory.getLogger(ThisUtils.class);
        if (list == null || list.isEmpty()) { return false; }
        for (T1 t: list) {
            Method method = null;
            try {
                method = t.getClass().getMethod(methodName);
                T2 prop = (T2) method.invoke(t);
                if (val == null) {
                    if (prop == null) { return true; }
                }
                else if (val.equals(prop)) {
                    return true;
                }
            }
            catch (Exception e) {
                StringWriter sw = new StringWriter();
                e.printStackTrace(new PrintWriter(sw));
                logger.error(sw.toString());
                return false;
            }
        }
        return false;
    }

使用例

宝くじのリストがあり、番号が合っているかのチェックがしたい

・List<Lottery> kujiList : くじのリスト
・public String Lottery.getNumber() : Lottery の番号取得メソッド
・String winNumber : 当選番号

boolean result = ThisUtils.isCollectionPropertyContains(kujiList, "getNumber", winNumber);

以上、お疲れさまでした!

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1