使用Java中Hashmap中ArrayList的过去数据和现在数据



来自三个传感器(x、y和z(的连续数据存储在哈希映射中(传感器名称为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包含原始数据(Key:传感器名称,ValueArrayList中的连续传感器数据(

我的方法正确吗?

谢谢。

在循环运行之前创建FilteredDataOfSensors的方式可能是您的问题。也许它需要提升为类成员,并在循环的多次运行中持久化和重用。

因为您询问的else代码只有在FilteredDataOfSensors中已经存在Sensor.getKey((时才会运行。但是FilteredDataOfSensors是刚刚创建的,所以在循环开始时它总是空的。

也许代码循环的ContinuousDataFromSensors对于给定的Sensor.getKey((有多个条目。但这似乎不太可能,因为大多数映射都使用唯一的键。而且,由于传感器的多个数据点不会出现在多个地图条目中,它们都在一个地图条目的ArrayList中(

谢谢你在问题中放了一个代码片段。放上完整的方法或类会更容易提供帮助。祝你好运

最新更新