オブジェクトリストのプロパティの値をチェックしたい
・毎回 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);
以上、お疲れさまでした!