我有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以便我可以重置计数器以重新开始计数?
答案 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
}