实体列表中值的频率

时间:2017-01-03 18:12:50

标签: java list entity frequency

我有一个名为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。我应该改变什么,以便每个位置都能显示正确的出现次数?

2 个答案:

答案 0 :(得分:1)

您在Collections.frequency()使用efuriList<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?