2017-01-03 4 views
0

값이 (ID, Post, Sarcina) 인 Elementfisa라는 엔티티가 있습니다. 이제 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

efuri, List<Elementfisa>Collections.frequency()을 사용하고 있습니다. 하지만 i.getSarcina()Sarcina 개체로 전달 중입니다. ListElementfisa 일 경우 Sarcina 개체를 포함 할 수 없으므로 0이됩니다. 방법에 잘못된 목록을 전달했을 수 있습니다.


편집 :
당신이 사용하는 자바 (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()은 두 개의 Elementisa 객체의 ID (값이 아님)를 확인하므로 원하는 값을 얻지 못하는 것 같습니다. 논리에서 동일한 값을 가진 두 객체는 ​​동일한 것으로 간주 될 수 있습니다. equals()에 대한 자세한 내용은

참조

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

+0

목록에 'Elementisa'가 포함되어 있지만'Sarcina's가 목록에 포함되어 있는지 확인하고 있습니다. – Moira