확인하는 방법 (난 당신이 여전히 어려움을 겪고 있었다봤을 때 내가 빨리 함께이 던진 불구하고 - 수를 유지하는지도의 사용이 화려한 아닌)이 같은 약 :
변경 로그에 :
Integer id;
DateTime time;
String value;
public Log(Integer id, Timestamp time, String value) {
this.id = id;
this.time = new DateTime(time.getTime());
this.value = value;
}
그런 다음 :
여기
// Build some fake logs
final List<Log> logs = new ArrayList<Log>();
logs.add(new Log(1, new Timestamp(new DateTime().withDate(2011,1,1).getMillis()), "90"));
logs.add(new Log(1, new Timestamp(new DateTime().withDate(2010,1,1).withTimeAtStartOfDay().getMillis()), "60"));
logs.add(new Log(1, new Timestamp(new DateTime().withDate(2010,1,1).withTimeAtStartOfDay().getMillis()), "80"));
logs.add(new Log(1, new Timestamp(new DateTime().withDate(2009,1,1).getMillis()), "70"));
final Map<DateTime, Integer> total = new HashMap<DateTime, Integer>();
final Map<DateTime, Integer> count = new HashMap<DateTime, Integer>();
for(Log l : logs) {
// Round down to the nearest minute
final DateTime t = l.getTime().withSecondOfMinute(0);
Integer sum = total.get(t);
sum = (sum == null) ? 0 : sum;
total.put(t, sum + Integer.parseInt(l.getValue()));
Integer c = count.get(t);
c = (c == null) ? 0 : c;
count.put(t, c + 1);
}
for(Map.Entry<DateTime, Integer> entry : total.entrySet()) {
System.out.println(entry.getValue()/count.get(entry.getKey()));
}
나는 여전히 Log
생성자에서 TimeStamp
을 사용하고자하는 것으로 가정하지만, STO 상관 없어 내부적으로 JodaTime DateTime
오브젝트로 호출하십시오. 그런 다음 가짜 로그를 만듭니다. 그런 다음 모든 로그를 반복하고 가장 가까운 분 (분 및 총)에 저장합니다. 현실적으로이 데이터를 저장하는 객체를 생성 한 다음 (DateTime
) 키를 사용합니다. 나는 이것이 의미가 있기를 바랍니다.
모든 로그 항목을 반복하십시오. 동일한 분 값이있는 경우 맵 내부의 누적 합계에 추가하고 각 분에 대한 별도의 목록도 유지하십시오. 그런 다음 다시 반복하고 전체/수를 인쇄하십시오. – BeRecursive
그리고 (가정하는 것) 대신 JodaTime을 사용할 것을 제안 할 수 있습니다. – BeRecursive
@BeRecursive 문제는 이것입니다. 이제 어떻게 달라 졌습니까? 몇 가지 예를 보여 주시겠습니까? –