Использование прошлых данных с настоящими данными ArrayList внутри Hashmap в Java - PullRequest
0 голосов
/ 07 декабря 2018

Непрерывные данные от трех датчиков ( x, y и z ) сохраняются в Hashmap (имена датчиков - Key , а данные в ArrayList - value ).Для данных от каждого датчика мне нужно применить фильтр нижних частот.Я пытаюсь сделать это следующим образом:

    ArrayList<Float> TempArray = new ArrayList();
    Map<String,ArrayList<Float>> FilteredDataOfSensors = new HashMap<String, ArrayList<Float>>();
    float filteredData;
    for(Map.Entry<String , ArrayList<Float>>Sensors:ContinuousDataFromSensors.entrySet())
    {
        TempArray = AccessPointId.getValue();
        String SensorName = Sensors.getKey();
        ArrayList<Float> arrayOfFilteredData = FilteredDataOfSensors.get(SensorName);
        if(arrayOfFilteredData == null)
        {
            arrayOfFilteredData = new ArrayList<Float>();
            FilteredDataOfSensors.put(SensorName,arrayOfFilteredData);
        }
        if(arrayOfFilteredData.size() == 0 && TempArray.size() == 1) {filteredData = TempArray.get(0); Log.d("Test", "Inside If");}
        else if(arrayOfFilteredData.size() == 0 && TempArray.size() > 1) {filteredData = TempArray.get(TempArray.size()-1);Log.d("Test", "Inside else If");}
      else {  FilteredData = (float) (0.5 * TempArray.get(TempArray.size()-1) + 0.5 * arrayOfFilteredData.get(arrayOfFilteredData.size()-1)); Log.d("Test", "Inside else");}
        arrayOfFilteredData.add( FilteredData);     
    }

Во время выполнения приведенного выше фрагмента кода цикл никогда не входит в условие else .

В моем случае, когда приложение запускается, оно может не получить данные со всех датчиков в начале.Приведенный выше фрагмент кода запускается, когда имеется хотя бы одна информация от каждого датчика.Таким образом, при запуске кода может быть много данных от датчика и только одна информация от другого датчика.Мне нужно отфильтровать данные датчика, используя прошлые данные и текущие данные.

Хеш-карта ContinuousDataFromSensors содержит необработанные данные ( Ключ : имя датчика, Значение : непрерывные данные датчика в ArrayList )

Правильный ли мой подход?

Спасибо.

1 Ответ

0 голосов
/ 10 декабря 2018

Способ создания FilteredDataOfSensors до запуска цикла может быть вашей проблемой.Возможно, его необходимо повысить до члена класса, сохранить и использовать повторно для нескольких запусков цикла.

Поскольку код else, о котором вы спрашиваете, запускается только тогда, когда Sensor.getKey () уже существует в FilteredDataOfSensors.Но FilteredDataOfSensors был только что создан, поэтому он всегда пуст, когда начинается цикл.

Возможно, если ContinuousDataFromSensors, на котором зацикливается код, имел несколько записей для данного Sensor.getKey ().Но это кажется маловероятным, так как большинство карт используют уникальные ключи.А также, поскольку несколько точек данных для датчика не входят в несколько записей карты, все они находятся в ArrayList одной записи карты)

Спасибо за добавление фрагмента кода с вашим вопросом, кстати.Помещение полного метода или класса облегчает задачу.Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...