javaのList型変数の全要素が、指定した値で埋められているか調べるにはどうしたらいいか?
そんなロジックを書かなければいけない状況に出くわすのが稀だけど(設計自体見なおした方がいい可能性が高い)、仕事でListの全要素が空文字列かどうか判定しなければいけない状況に出くわしたのでメモ。
Collections#frequency(Collection<?>, Object)
(since 1.5)で一致する要素数が調べられるので、Listのサイズと比較すれば判定できる。
空文字列で埋められているか?
List<String> lst = new ArrayList<>(Collections.nCopies(3, ""));
// 判定
System.out.println(Collections.frequency(lst, "") == lst.size());
// -> true
System.out.println(String.format("値[%s] 一致数[%d/%d]",
lst,
Collections.frequency(lst, ""),
lst.size()));
// -> 値[[, , ]] 一致数[3/3]
以下おまけ
指定の数値で埋められているか?
List<Integer> lst = new ArrayList<>(Collections.nCopies(3, 5));
System.out.println(Collections.frequency(lst, 5) == lst.size());
// -> true
nullで埋められているか?
List<String> lst = Arrays.asList(new String[3]);
System.out.println(Collections.frequency(lst, null) == lst.size());
// -> true
指定したインスタンスで埋められているか?
List<Integer> ins = new ArrayList<>(Arrays.asList(new Integer[]{1,2,3}));
List<List<Integer>> lst = new ArrayList<>(Collections.nCopies(3, ins));
ins.add(4);
System.out.println(Collections.frequency(lst, ins) == lst.size());
// -> true
※コードはjava 7で書いています