我有一个名为onEddystonesFound的方法,它大约每秒运行一次。作为参数,它具有按RSSI值排序的信标列表,因此可以在索引[0]中找到最接近的信标。
每个信标都有一个UID,可以用例如来调用。 beacon.get(0).instance和一个RSSI值,可以使用例如beacon.get(0).instance
对于4个最近的信标,我想为每个信标收集10个最新的RSSI值,并计算10个值的平均值和标准偏差,以消除异常值,并计算剩余值的新平均值。我怎样才能做到最好呢?
我尝试了类似以下代码的方法,但是我不认为这是正确的方法。有人可以帮忙吗?
private Map<String, List<Eddystone>> beaconMap = new HashMap<>();
private Map<String, Double> averageMap = new HashMap<>();
@Override
public void onEddystonesFound(List<Eddystone> beacon) {
//populates map
for (int i = 0; i < beacon.size(); i++) {
beaconMap.put(beacon.get(i).instance, beacon);
}
//loops through map
for (List<Eddystone> e : beaconMap.values()) {
int sum = 0;
//loops through list in map
for (int i = 0; i < e.size(); i++) {
sum = sum + e.get(i).rssi;
}
if (e.size() >= 10) {
double average = sum / e.size();
for (int i = beaconMap.size() - 10; i < beaconMap.size(); i++) {
List<String> keys = new ArrayList<>();
keys.addAll(beaconMap.keySet());
averageMap.put(keys.get(i), average);
}
}
}