Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/207.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java的Hashmap中使用ArrayList的过去数据和当前数据_Java_Android_Arraylist_Hashmap - Fatal编程技术网

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

在Java的Hashmap中使用ArrayList的过去数据和当前数据,java,android,arraylist,hashmap,Java,Android,Arraylist,Hashmap,来自三个传感器(x、y和z)的连续数据存储在Hashmap中(传感器名称作为键,ArrayList中的数据作为值)。对于来自每个传感器的数据,我需要应用低通滤波器。我试着用以下方法来做: ArrayList<Float> TempArray = new ArrayList(); Map<String,ArrayList<Float>> FilteredDataOfSensors = new HashMap<String, ArrayLis

来自三个传感器(x、y和z)的连续数据存储在Hashmap中(传感器名称作为键,ArrayList中的数据作为值)。对于来自每个传感器的数据,我需要应用低通滤波器。我试着用以下方法来做:

    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);     
    }
ArrayList TempArray=new ArrayList();
Map filtereddaotafsensors=new HashMap();
浮子过滤器数据;
对于(Map.EntrySensors:ContinuousDataFromSensors.entrySet())
{
TempArray=AccessPointId.getValue();
字符串SensorName=Sensors.getKey();
ArrayList arrayOfFilteredData=FilteredDataOfSensors.get(传感器名称);
如果(arrayOfFilteredData==null)
{
ArrayOfficedData=新的ArrayList();
filtereddaofsensors.put(传感器名称、阵列过滤数据);
}
if(arrayOfFilteredData.size()==0&&TempArray.size()==1){filteredData=TempArray.get(0);Log.d(“测试”,“内部if”);}
else if(arrayOfFilteredData.size()==0&&TempArray.size()>1){filteredData=TempArray.get(TempArray.size()-1);Log.d(“测试”,“内部else if”);}
else{FilteredData=(float)(0.5*TempArray.get(TempArray.size()-1)+0.5*ArrayOfficedData.get(ArrayOfficedData.size()-1));Log.d(“测试”,“内部else”);}
arrayOfFilteredData.add(FilteredData);
}
运行上述代码段时,循环从不进入else条件

在我的情况下,当应用程序启动时,它可能不会在开始时从所有传感器获取数据。当每个传感器至少有一个数据时,上述代码段开始。因此,当代码开始时,可能有许多来自传感器的数据,而只有一个来自另一个传感器的数据。我需要使用过去数据和当前数据过滤传感器数据

hashmap
ContinuousDataFromSensors
包含原始数据(:传感器名称,:阵列列表中的连续传感器数据)

我的方法正确吗


谢谢。

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

因为您询问的
else
代码仅在
filtereddaotafsensors
中已经存在Sensor.getKey()时运行。但是,
filtereddaotafsensors
刚刚创建,因此循环开始时它总是空的

如果代码循环所在的传感器的
ContinuousDataFromSensors
具有给定传感器的多个条目。getKey()。但这似乎不太可能,因为大多数地图都使用唯一的键。此外,由于传感器的多个数据点不会进入多个地图条目,因此它们都位于一个地图条目的ArrayList中)


感谢您在问题中加入代码片段。顺便说一句,加入完整的方法或类会使帮助更容易。祝你好运

我作为一个类成员创建了“FilteredDaotafsensors”,它起了作用。谢谢