考えられる唯一の答えは、再帰またはリストを文字列に変換することでしたが、文字列のリストが与えられました。
List<String> items = Arrays.asList("a,b,a,c,d,e,a".split("\\s*,\\s*"));
反復を使用せずに、任意の種類のリストで特定の値の出現回数を見つけるにはどうすればよいでしょうか (ライブラリ メソッドの動作を無視できると思います)。たとえば、上記の「a」の値は 3 になります。
はい、これはインタビューの質問でした:)
コレクションを反復せずに各要素を検査するにはどうすればよいですか? 繰り返しを明示的にコーディングすることを避けるために、Collections.frequency()which を使用できます。
指定されたオブジェクトと等しい、指定されたコレクション内の要素の数を返します。より正式には、(o == null ? e == null : o.equals(e)) となるコレクション内の要素 e の数を返します。
これは再帰的な解決策であり、常にスタック オーバーフローが発生しやすく、Java ではあまり良い選択ではありません。しかし、インタビュアーは再帰が好きなので、ここに行きます:)
int countOccurences(List<T> l, T x) {
return l.isEmpty()? 0
: (l.get(0).equals(x)? 1 : 0) + countOccurrences(l.subList(1, l.length()), x);
}
1つの方法は次のとおりです。
int countInCollection(List<T> list, T toFind) {
int count = 0;
while (list.remove(toFind)) {
count++;
}
return count;
}