我有一个名为elementfisa的实体,它包含as值(id、post、sarcina)。现在,post(int id,string nume,string tip)和sarcina(int id,string desc)也是实体。我有一个列表,列出了我作为elementfisa添加的所有元素,我想在一个单独的列表中列出每个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()从存储库返回hashmap中包含的每个元素)但是由于某种原因,sarcini列表包含每个elementfisa中的所有sarchina,而frequency列表在每个位置都显示0。我应该改变什么以便每个位置都显示正确的出现次数?
2条答案
按热度按时间dkqlctbz1#
你用的是
Collections.frequency()
在efuri
,一个List<Elementfisa>
. 但你路过了i.getSarcina()
为了它,一个Sarcina
对象。一List
的Elementfisa
不可能包含Sarcina
所以你得到零。您可能向方法传递了错误的列表。编辑:
看看所有
Sarcina
s在efuri
,您可以使用java 8流执行此操作:分解:
d6kp6zgx2#
您确定不需要重写吗
equals()
的Elementisa
? (以及hashcode()
也是)。默认javaequals()
似乎没有得到你想要的,因为这将是检查身份(而不是价值)的两个Elementisa
对象,而在您的逻辑中,具有相同值的两个这样的对象可能被认为是等价的。更多关于
equals()
,请参见在java中重写equals和hashcode时应该考虑哪些问题?