並びが不明な配列同士の一致確認って結構ある
DBから取得した配列って、並びが定まらないことが良くあります。
そんな配列の一致確認をできるだけ少ないコードで表現できないか考えてみました。
すっきりやりたいんだから、以下のような状況のはず
Stream.sorted() でソートが可能な型であること
Stringとか、Integerなど、単純な型なら Stream.sorted()
でソートできますね。
ただし、この限りではないです。
また、Comparator を定義すれば問題ないです。
null が含まれていないことが検証済み
NullPointerException でます。
一致、不一致のみを得る
ここは言わずもがな
ソースコード
Sample.java
public boolean isEqualsList(List<?> a, List<?> b){
return Arrays.equals(a.stream().sorted().toArray(), b.stream().sorted().toArray());
}
おまけ
Comparator を定義した場合でも、ぎりぎりすっきりと言えそうです。
Sample.java
public boolean isEqualsList(Comparator comp, List<?> a, List<?> b){
return Arrays.equals(a.stream().sorted(comp).toArray(), b.stream().sorted(comp).toArray());
}
あとがき
1文で書けました。
toArray() が Object[] である点はいやらしいですが、一致確認のみなので、問題ないですね。