在arraylist java中对重复值进行分组和计数

时间:2014-09-28 13:23:47

标签: java arraylist

我在我的应用程序中使用了ArrayLists,所以我不想转移到HashMaps,因为我已经看到了一些使用它的答案,但在我的情况下不起作用。

我正在创建我的最后一个高中项目,这是一个学习时间表调度程序。我已经设法按照考试日期对ArrayList进行排序,但现在我正在尝试分析时间表以对其进行评级,并将评级与其他生成的时间表进行比较,以便为用户提供最佳时间表(具有最高值)。

我已经制定了时间表来输出他们每天将要做的事情,即:南非荷兰语,IT,LO,数学,南非荷兰语,南非荷兰语等。

但是,即使最后两次考试在2天之内或者非常接近,它似乎也会在最后一次考试中重复,最后一次考试将在整个名单中占据主导地位。像这样:

Exam Dates:
LO = 2 Sep
Maths = 5 Sep
IT = 9 Sep
Afrikaans = 10 Sep

Results:
LO
IT
Afrikaans
Maths
IT
Afrikaans
Afrikaans
Afrikaans
Afrikaans

正如您所看到的,结果对最后一个主题的权重要大得多。

现在我正在尝试比较和分组数据,以便我可以看到为每个主题分配了多少天,因此使用上面的示例我需要它看起来像这样:

LO = 1
Maths = 1
IT = 2
Afrikaans = 5

到目前为止,我有这个:

ArrayList<Day> days = new ArrayList<Day>();
For(int i = 0; i < timeTable.size(); i++) {
    // need to group the days here
    if(days.contains(timeTable.get(i))) {
        days.get(i).incrementNumberOfDays();
    } else {
        days.add(timeTable.get(i));
    }
}

但这不是对数据进行分组并计算重复数据。 请帮助,我的项目将在一周内完成,我花了两个月的时间。我快结束了,我被困在这里。

提前致谢!

2 个答案:

答案 0 :(得分:1)

您可以使用java.util.Collections.frequency

int count = Collections.frequency(timeTable, value);

编辑:回答你在评论中提到的最后一个问题:

  

当然有一种快速简单的方法可以说这个值发生了3次   在arraylist?

答案 1 :(得分:0)

有必要在timeTable中提及,假设它包含两个相同的 Day - Afrikaans - 1,当您看到它们是同样,contains函数并不这么认为。虽然它们对每个属性都有相同的值,但不是哈希码。

您需要覆盖equals()的功能,以确保在比较两个Day时,如果它们具有相同的值,则将它们视为一个对象。

抱歉我的英语不好,希望你能得到它。