2013-02-04 8 views
6

OOP Javaでクラスを勉強しています。私は言語に全く触れていないし、提供しなければならない多くのツールを知らないうちに、暗闇の中で簡単なことの解決策を見つけ出すことはできません。 java.utilでこれを行う簡単な方法があると感じています。2つの文字列のリストを互いに照合するにはどうすればよいですか?

は私がstringTwo内の任意の項目がstringOneで発生した回数を確認するにはどうすればよいの文字列

String[] stringOne = {"a","b","c", "potato"}; 
String[] stringTwo = {"potato", "13"}; 

のリストを持っていると仮定しますか?またはその逆。むしろ私はこの問題を抱えている(またはダブルループの方法を作る)たびに、私はむしろループを二重にしたくないでしょう。

今は、Collections.frequency()を使用していますが、ループは1回だけですが、より簡単な方法がありますか?ありがとう。

答えて

3

は、私は文字列のリスト

String[] stringOne = {"a","b","c", "potato"}; 
String[] stringTwo = {"potato", "13"}; 

これらがあるとし、 "配列" ではなく、 "リスト" です。 Arrays.asList(stringOne)は、stringOneで参照される配列のリストラッパーです。

stringTwoの指定されたアイテムがstringOneで何回発生したかを確認するにはどうすればよいですか?

new HashSet(Arrays.asList(stringOne)).retainAll(Arrays.asList(stringTwo)) 

はあなたの両方の要素のセットを提供します。

同様のアプローチで、セットの代わりにBagを使用すると、カウントが得られます。

retainAll(Collection coll)

カーディナリティを尊重し、指定されたコレクションに含まれていないバッグの任意のメンバーを削除します。つまり、与えられたコレクションのcollが指定されたオブジェクトのn個のコピーを含み、バッグがm> n個のコピーを持つ場合、バッグからm - n個のコピーを削除します。さらに、eがバッグ内のオブジェクトであるが!coll.contains(e)の場合は、eとそのコピーを削除します。

コレクションクラスで使用される同等の概念は、辞書的に比較することが優先されますどのjava.lang.StringObject.equals(object)によって定義されていることです。

結果を配列に戻す必要がある場合は、内容を文字列にダンプするmyBag.toArray(new String[0])を試してください。引数はドキュメントに説明されていますが、要するに、Javaの壊れた配列の分散を取り巻く、型ヒントです。

+0

ああ、ありがとう、もっとエレガント! – arynaq

関連する問題