2017-07-21 7 views
-1

私はJavaのcontainsAllメソッドについて知っていますが、このメソッドは自分の必要条件のトリックを行いません。私はリスト興味深いJavaのリストにはクエリが含まれています

[7 1 0 4 5] 

と別のリストBがあるとし

[1 1] 

私はA.containsAll(B)を使用する2つのものがでていないので、私は本当の取得が、私はそれが偽になりたい場合はリストA.

これを行う方法はありますか?

+2

'Java!== JavaScript' –

答えて

0

CollectionUtils from apache frameworkは便利です。 isSubCollectionメソッドはここでトリックを行い、目的を解決します。 Bのサブコレクションがある場合に限っ以下であるに

public static boolean isSubCollection(Collection<?> a, 
         Collection<?> b) 

電子の カーディナリティ場合に限っ、つまり、記述が真

戻り値をreads-何下記を参照してくださいaの各要素eに対して、 bのeの基数。パラメータ: - 最初(サブ?) コレクション、ヌルBであってはならない - 秒(スーパー?)コレクション、 null戻り値でなければなりません:場合はtrueは、Bのサブコレクションである

0

私はのような単一の "チェック"メソッドを呼び出すだけで、これを行うための "直接"の方法を認識していません。

もう1つの答えとして、そのような種類のチェックを可能にするサードパーティのライブラリメソッドがあるかもしれません。

これはオプションではない場合、このようなチェックを自分で実装する方法はさまざまです。例:

  • ListItem<T>を表すクラスを作成します。このクラスは、基本的には、任意のタイプ(あなたの例では、それはListItem<Integer>だろうのリストからの要素が含まれています - 。そして特定のリスト内でそのアイテムの出現回数
  • 、あなたは両方のあなたのリストのためのListItemオブジェクトを作成
  • とあなたが、その後のListItemのために正しくイコール/ハッシュコードを実装するとき、あなたはリストアイテムのリストを作成することができます - し、別のListItemが含まれているかどうか尋ねる

あなたの例では:。

A: [7 1 0 4 5] gives ListItems (0, 1) (1, 1), (4, 1), (5, 1), (7,1) 

B: [ 1 1 ]  gives ListItem (1, 2) 

そして、明らかにBのためのListItem(1,2)は、リストA.

ためのListItemのリストに表示されていないあなたは、必ずしもそのための具体的なクラスを作成しません単純なHashMap<T, Integer>でも構いませんが、別個のクラスを持つとカウンタ値の暗黙的な増加などの素晴らしいヘルパーメソッドが可能になります。

異なる性質のオーバーヘッドを必要とする別の方法:最初に両方のリストを並べ替えてから、最初のリストを繰り返し、2番目のリストの各エントリが表示されるかどうかを確認します。

関連する問題