一般的な Java ライブラリで、有限コレクション内の要素を検索し、一致する要素 が 1 つだけであることを 確認する方法を提供するものはありますか?
このメソッドは、たとえば、null
何も見つからなかった場合に戻り、複数の要素が見つかった場合に例外をスローすることができます。
現在、私は独自の実装 (以下を参照) を使用していますが、そのようなユーティリティ メソッドでビジネス コードを汚染したくはありません (別のユーティリティ パッケージに抽出されたとしても)。
また、コレクションを複数回反復するオーバーヘッドや、コレクションをフィルタリングして結果の長さを確認するオーバーヘッドも必要ありません。
PS私の現在のソリューション(これは機能しますが、ライブラリメソッドに置き換えられます):
public static <T> T getSingleMatch(Iterable<T> lookIn, com.google.common.base.Predicate<? super T> predicate) {
T foundItem = null;
for (T item : lookIn) {
if (predicate.apply(item)) {
if (foundItem != null)
throw new RuntimeException("multiple matches"); // alternatively: `return null;`
else
foundItem = item;
}
}
// alternatively: `if (foundItem == null) throw ...`
return foundItem;
}