2016-04-26 1 views
1

Ich arbeite an einem Projekt, bei dem ich feststellen muss, wann ein Fahrereignis endet. Eine Funktion erhält eine HashMap<Date, Integer>, die Konfidenzniveaus in Fahrzeug/zu Fuß in Form eines Prozentsatzes neben einem Unix-Zeitstempel enthält.Java HashMap-Iteration zum Finden eines Fahrer-Endereignisses

Ich versuche, über diese HashMap zu iterieren, festzustellen, ob ein treibendes Ereignis beendet wurde.

Ich bin ein PHP-Entwickler und es ist eine echte Herausforderung, Java-Logik wie diese zu verwenden, und ich kämpfe darum, etwas zu erreichen, das einfach sein sollte. Jede Hilfe wird geschätzt.

Heres die Logik Ich versuche zu implementieren:

wie diese
If 
    we have at least 1 minute worth of data with 10 items in our HashMap 
then 
    loop HashMap 
    if past 30 seconds of time, from 30 seconds ago contain driving data of 60% confidence adverage or above then 
    AND past 30 seconds of time from now contains working data with average 60% confidence or above 
    then 
     mark isDriving as true 
if isDriving == true 
then 
    doSomething()` 

Mein HashMap sieht etwas: Dies ist nur eine Teilantwort

private HashMap mActivityData = new HashMap<String, Long>(); 

mActivityData.putExtra("in_vehicle",80); // % confidence 
mActivityData.putExtra("on_foot",10); // % confidence 
mActivityData.putExtra("time",1461684458); // unix time stamp 
+1

Erhalten Sie Ihre Generika richtig, z. Für die angezeigten Daten: 'private HashMap mActivityData = new HashMap <>();' –

+0

Tatsächlich sieht eine Map hier nicht korrekt aus, wenn die Werte verschiedene Typen sind (% vs. Timestamp). Angenommen, Sie müssen keine neuen Schlüssel dynamisch erstellen, verwenden Sie einfach drei richtig typisierte Variablen: 'double in_vehicle; double on_foot; Datum Uhrzeit; '. –

+1

Was genau ist deine Frage? Was hast du versucht und wo versagt es? –

Antwort

1

.

Sie haben "loop HashMap {...}" in Ihrer Frage erwähnt, aber Sie können nur die Schlüssel der hashmap durchlaufen. (Oder über die Werte mit .values())

Um die Schlüssel eines HashMap<Date, Integer> zu erhalten:

Set<Date> dates_unordered = my_hashmap.keySet(); 

Ein Set ungeordnet ist, um es mit einer Funktion wie this one verwenden zu bestellen eine geordnete Liste zu erstellen. (Das „Datum“ Klasse implementiert die „Vergleichbar“ Schnittstelle, die für die Sortierung benötigt wird, zu arbeiten)

List<Date> dates_ordered = asSortedList (dates_unordered); 

Iterate über die Liste.

Iterator<Date> it = dates_ordered.iterator(); // create an iterator object 
while (it.hasNext()) 
{ 
    Date d = it.next(); 
    Integer i = my_hashmap.get (d); // access value in hashmap with this key 

    // do something with "i" here 
    // ... 
} 
+0

Das ist großartig, löste mein Problem. Danke für die tolle Erklärung. – kirgy