根据每个字符串的计算值拆分arraylist

时间:2015-10-15 06:00:56

标签: java string arraylist

我有ArrayList个字符串,在迭代时for(int i =0; i < arrayList.size(); i++)。每个字符串都取自.csv文件,因此它们以逗号分隔。其中一列有一个unix时间戳,所以一串数据看起来像这样(我审查了不相关的值):

1442759243, value, value, value

所以,当我迭代时,我提取unix时间戳以找到特定日期,

java.util.Date time = new java.util.Date((long) timeStamp * 1000);
// gives a result of Tue Sep 15 22:38:04 SGT 2015
String date = String.valueOf(time.getDate());;
// gives the result of "15"

当迭代继续进行时(列表按时间排序,因此数字,例如15,随着列表的增加而逐渐增加),下一个String date与下一个==的值不同前一个。 现在,在每次字符串迭代时,我设置了一个递增的计数器。当日期改变时,我想要的是计数器重置并重新开始计数。我的问题是,我如何“拆分”arraylist以便我可以重置计数器以重新开始计数?

2 个答案:

答案 0 :(得分:1)

只需保留上一个日期,并在每次迭代时将当前日期与上一个日期进行比较:

int counter = 0;
String prevDate = "";
for (int i = 0; arrayList.size(); i++) {
    long timestamp = Long.parseLong(arrayList.get(i));
    Date time = new Date(timeStamp * 1000L);
    String date = String.valueOf(time.getDate());
    if (date.equals(prevDate)) {
        ++counter;
    } else {
        counter = 1;
        prevDate = date;
    }
    // Do something useful with the counter
}

答案 1 :(得分:1)

您的for循环错误。它不会编译。

您可以通过调用split(",")来分割arraylist中的值。

getDate()已弃用。使用Calendar

要重置计数器,请记住上一个值并在其更改时重置。

Calendar cal = Calendar.getInstance();
int counter = 0, prevDay = 0;
for (int i = 0; i < arrayList.size(); i++,counter++) {
    String[] values = arrayList.get(i).split(",");
    cal.setTimeInMillis(Long.parseLong(values[0]) * 1000);
    int day = cal.get(Calendar.DAY_OF_MONTH);
    if (day != prevDay) {
        counter = 0;
        prevDay = day;
    }
    // code here
}