2015-10-15 2 views
2

У меня есть ArrayList строк, на которых на итерации, for(int i =0; i < arrayList.size(); i++). Каждая строка берется из файла .csv, поэтому они разделяются запятыми. Один из столбцов имеет метку времени Unix, поэтому одна строка данных выглядит как-то вроде этого (я цензурированные из нерелевантные значения):Сплит arraylist на основе расчетного значения каждой строки

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 является другим значение из предыдущего. Теперь, на каждой итерации строк я установил счетчик, который увеличивается. Когда дата изменяется, я хочу, чтобы счетчик сбросил и снова начал отсчет. Мой вопрос: как мне «расколоть» арраиста, чтобы я мог сбросить счетчик, чтобы начать подсчет снова?

ответ

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 
} 
+0

Вы пропустили что-то здесь ;-) – laune

+0

@laune arg, да. Это было неловко :-( – Mureinik

1

Ваш for цикл является неправильным. Он не будет компилироваться.

Вы разделили значения в arraylist, позвонив по номеру split(",").

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 
} 
+0

мой плохой, отредактированный цикл for! – user3763216

Смежные вопросы