我有一个名为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的所有Sarcina,但频率列表将在每个位置显示0。我应该改变什么,以便每个位置都能显示正确的出现次数?
答案 0 :(得分:1)
您在Collections.frequency()
使用efuri
,List<Elementfisa>
。但是你将i.getSarcina()
传递给Sarcina
对象。 List
Elementfisa
Sarcina
不能包含Sarcina
个对象,因此您将获得零。您可能已将错误的列表传递给方法。
编辑:
要查看efuri
中的所有efuri.stream().map(element -> element.getSarcina())
.collect(Collectors.toList()).contains(i.getSarcina())
,您可以使用Java 8流执行此操作:
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
故障:
{{1}}
答案 1 :(得分:0)
您确定无需覆盖equals()
的{{1}}吗? (还有Elementisa
)。默认的Java hashcode()
似乎没有得到你想要的东西,因为它会检查两个equals()
对象的身份(而不是值),而在你的逻辑中,两个具有相同值的对象可能被认为是等同的。
有关Elementisa
的详情,请参阅
What issues should be considered when overriding equals and hashCode in Java?