2017-01-03 13 views
0

私はElementfisaという名前のエンティティを持っています。これには値(id、Post、Sarcina)が含まれています。今、Post(Int Id、String Nume、String Tip)とSarcina(Int Id、String Desc)もエンティティです。私はElementfisaとして追加したすべての要素のリストを持っており、Elementfisaに含まれるすべてのSarcinaの頻度を別々のリストに入れたいと考えています。これが今の私のコードです:sarciniリストは、すべてのElementfisaからすべてサルシナ、周波数リストが含まれていながら、エンティティリスト内の値の頻度

int nr=0; 
    List<Integer> frecv=new ArrayList<Integer>(); 
    List<Sarcina> sarcini = new ArrayList<>(); 
    List<Elementfisa> efuri=findEFAll(); 
    for (Elementfisa i : efuri) 
    { 
     nr=0; 
     for (Sarcina s : sarcini) 
      if (s.equals(i.getSarcina())) 
        nr=1; 
     if (nr==0) 
     { 
      int freq = Collections.frequency(efuri, i.getSarcina()); 
      sarcini.add(i.getSarcina()); 
      frecv.add(freq); 
     } 
    } 

、(findEFAll()は、リポジトリからハッシュマップに含まれるすべての要素を返します) しかし、いくつかの理由ですべての位置に0が表示されます。私はどのような位置に正しい発生回数が表示されるように変更する必要がありますか?

+0

は空efuriですか? – Moira

+0

いいえ、Elementfisaエンティティ(id、Post、Sarcina)が含まれています – Artyomska

+0

'if(nr == 0)'を 'if(!sarcini.contains(i.getSarcina())'に置き換え、 'nr'コード。また、あなたは 'equals()'をオーバーライドしましたか? – Moira

答えて

1

efuriList<Elementfisa>に使用しています。しかし、i.getSarcina()にはSarcinaオブジェクトが渡されています。 ListElementfisaには、おそらくSarcinaオブジェクトが含まれていない可能性があります。メソッドに間違ったリストを渡した可能性があります。


編集:
は、この使用してJava 8のストリームを行うことができ、efuri内のすべてのSarcinaのを見て:

efuri.stream().map(element -> element.getSarcina()) 
    .collect(Collectors.toList()).contains(i.getSarcina()) 

内訳:

efuri.stream() //Turns this into a stream of Elementfisa 
.map(element -> element.getSarcina()) //Turns this into a stream of Sarcina 
.collect(Collectors.toList()) //Turn this into a list 
.contains(i.getSarcina()) //Check if the list contains the Sarcina 
+0

を使用する必要がありましたが、それは問題だと思ったが、Sarcinaを "efuri"からどのように抽出できるのか、i.getSarcina )?または、現在のi.getSarcina()と "efuri"のすべてのSarcina値を比較する別の方法があるので、頻度を取得できますか? – Artyomska

+0

@Artyomska編集された答え。 – Moira

+0

ありがとうございました。解決策は働いて、今私は正しい周波数を得る: – Artyomska

0

は、あなたがあなたがよろしいです上書きする必要はありませんequals()Elementisaですか? (およびhashcode()も)。デフォルトのJava equals()は、2つのElementisaオブジェクトのID(値ではない)をチェックするため、希望の値を得られないようですが、ロジックでは同じ値を持つ2つのオブジェクトが同等とみなされます。 equals()の詳細については

、参照

What issues should be considered when overriding equals and hashCode in Java?

+0

リスト自体に 'Elementisa'sが含まれていますが、リストに' Sarcina'sが含まれているかどうかをチェックしています。 – Moira