2017-01-03 51 views
0

我有一個名爲Elementfisa的實體,它包含值(id,Post,Sarcina)。現在,Post(Int Id,String Nume,String Tip)和Sarcina(Int Id,String Desc)也是實體。我列出了作爲Elementfisa添加的所有元素,並且我想單獨列出每個Elementfisa包含的每個Sarcina的頻率。這是我的代碼現在:實體列表中的值的頻率

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()返回包含在一個HashMap中的每一個元素從資源庫) 但由於某些原因,而sarcini列表包含所有從每一個Elementfisa的藤黃,頻率列表將在每個位置顯示0。我應該改變什麼,所以每個位置都應該顯示正確的發生次數?

+0

是efuri空? – Moira

+0

不,它包含Elementfisa實體(id,Post,Sarcina) – Artyomska

+0

你可以用if(!sarcini.contains(i.getSarcina()))替換'if(nr == 0)''並且消除'nr'碼。另外,你是否重寫了'equals()'? – Moira

回答

1

您在efuriList<Elementfisa>上使用Collections.frequency()。但是你將i.getSarcina()傳遞給它,Sarcina對象。 A ListElementfisa不能包含Sarcina對象,因此您得到零。您可能已將錯誤列表傳遞給該方法。


編輯:
要查看所有Sarcina S IN efuri,你可以做到這一點使用Java 8流:

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

我認爲這是問題,但我怎樣才能從「efuri」中提取Sarcina,所以我可以將其與i.getSarcina進行比較( )?還是有另一種方法來比較當前的i.getSarcina()與來自「efuri」的每個Sarcina值,所以我可以得到頻率? – Artyomska

+0

@Artyomska編輯答案。 – Moira

+0

非常感謝。該解決方案的工作,現在我得到正確的頻率:) – Artyomska

0

你確定你做不需要覆蓋Elementisaequals()? (還有hashcode())。默認的Java equals()似乎沒有得到你想要的,因爲它將檢查兩個對象的標識(而不是值),而在你的邏輯中,具有相同值的兩個這樣的對象可以被認爲是等價的。

有關equals()的更多信息,請參閱

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

+0

該列表本身包含'Elementisa's,但他們正在檢查列表是否包含Sarcina,等於在這裏幫不了多少 – Moira