2016-11-10 6 views
1

ここでは、リスト内に多くのCustomizableMenusオブジェクトがあるので、2つのCustomizableMenusオブジェクトに同じcust.getComponentState()が含まれているかどうかを調べたいと思います。 それから、getComponentState();を見つけたいと思います。ここで私は私のcode.Howを投稿しているリストから値を得ることができます。リストの同じ値を見つける<Object>?

for(CustomizableMenus cust : ra.getAction().getCustomizablemenu()){ 

    cust.getComponentId(); 
    cust.getComponentIdentification(); 
    cust.getComponentName(); 
    cust.getComponentState(); 

    custList.add(cust); 

    System.out.println("cust menus in ctrl custid "+ cust.getComponentId()+"component name is "+cust.getComponentName()+"identification "+cust.getComponentIdentification()); 

} 
+0

、リスト1つのより多くの時間を反復処理し、内部ループとアウトループの各値と比較し、これはあなたのリストの要素の一致が得られます。 – Rakesh

+0

@ GoXR3Plusで – Rakesh

答えて

0

基本的には検索メカニズムを探しています。すべての繰り返しで、そのオブジェクトをマップに格納することができます。マップはマップ

map.put(cust.getComponentState(), cust); 

にエントリを追加して、あなただけの

を使用してマップを検索するには

Map<String, CustomizableMenus> map = new HashMap<>(); 

のライン上の値のものとしてキーやオブジェクトなどのコンポーネントの状態を持つことができます

map.get(cust.getComponentState())

オフコースでは、オブジェクトのリストをもう一度ループすることができます(リストのサイズが大きい場合に問題になる可能性があります)

+0

を説明しました。map.get(cust.getComponentState())がクラス名を印刷しています – mike

+0

CustomizableMenus c = map.get(cust.getComponentState());次に、c.getComponentId()または何でも。デフォルトでは、オブジェクトを印刷するときにtoString()メソッドが呼び出されます。 – user1339772

1

はあなたが複雑O(n^2)でループプラスif文の複雑さを実行するようn項目とn項目を比較する必要があります:あなたはArrayListMapを使用しているものは何でも

..ロジックは同じです。


一般コード:あなたの状況について

for(Item item1:yourList.getItems()){ 
    for(Item item2:yourList.getItems()) 
     if(item2!=item1) //not compare the item with it's self 
     //if they have the same component state 
     if(item2.getComponentState() == item1.getComponentState()){ 
      //..do something 
     } 
     } 

for(CustomizableMenus cust1 : ra.getAction().getCustomizablemenu()){ 
    for(CustomizableMenus cust2 : ra.getAction().getCustomizablemenu()){ 
     if(cust1 != cust2) //not compare the item with it's self 
     //if they have the same component state 
     if(cust1 .getComponentState() == cust2 .getComponentState()){ 
      //..do something 
     } 
     } 

編集:

そう、あなたがリストの最初の項目を取得している最初の時間のためにループに入る

cust1を:

は、なぜ私はあなたがhere.Letの参照2つの例をループする必要がif(cust1 != cust2)

を使用する必要があります(今はリストの最初の要素です)。次に2番目のループに入り、リストの最初の項目をもう一度取得しています。今度はcust1cust2は同じです(リストの最初の項目)彼らを比較したくない場合(cust1 .getComponentState() == cust2 .getComponentState())それらは同じアイテムです。

第二のループは、...今ようにList.Andの2番目の項目であるcust2と(リストの最初の項目がまだある)cust1とを比較すると

第2のループ終了を続行しますcust1がリストの2番目の項目になり、その後2番目のループに入ります。最初にcust1(今はリストの2番目のアイテム)とcust2(これはリストの最初のアイテムです)と比較します。次にcust1cust2を比較します(これはリストの2番目のアイテムですが、cust1もリストの2番目のアイテムです)、(cust1 .getComponentState() == cust2 .getComponentState())のために比較する必要はありません。

私は if(cust1 != cust2)


最後に使用していますなぜ

私はあなたが理解してほしい:

このソリューションは、学術目的のためだけである チェ。パフォーマンス面でより良いソリューションを提供するために、以下のリンクをクリックしてください。 forループ内

http://javarevisited.blogspot.gr/2015/06/3-ways-to-find-duplicate-elements-in-array-java.html

+0

cust1とcust2は常に同じbeacauseになります.cust1の次のcust2は実行されますので、明らかに同じオブジェクトを取得します。だから、それは決して平等ではありません!!! – mike

+0

@Mikeあなたはそれを記述しているので、いいえ、私はあなたが@override 'equals'メソッドの場合にそれを追加しました;) – GOXR3PLUS

+0

firistと第2のオブジェクトが同じなのでコントローラもif条件に入っていません。私は経験がありません。私が等しくない操作を取り除いて二重の等価操作を保っていると入力しています。 – mike

関連する問題