我有一个这样的txt文件,我正在浏览它
wlan_AP : lcb-kasse | ActiveUsers : 1
wlan_AP : WLAN-C7B702 | ActiveUsers : 1
wlan_AP : Telekom | ActiveUsers : 1
wlan_AP : Telekom | ActiveUsers : 1
wlan_AP : FRITZ!Box | ActiveUsers : 1
wlan_AP : Telekom | ActiveUsers : 1
wlan_AP : Sperling2 | ActiveUsers : 1
wlan_AP : lcb-kasse | ActiveUsers : 2
wlan_AP : WLAN-C7B702 | ActiveUsers : 2
wlan_AP : Telekom | ActiveUsers : 2
wlan_AP : Telekom | ActiveUsers : 2
wlan_AP : FRITZ!Box | ActiveUsers : 2
wlan_AP : Telekom | ActiveUsers : 2
wlan_AP : Sperling2 | ActiveUsers : 2
所以我有WiFi-AccessPoint名称(wlan_AP)和目前活跃用户数量的测试结果。
您可能已经看到每个AccessPoint都有多个测量值(例如 lcb-kasse )
我希望在程序结束时获得平均活跃用户数。
因此我创建了一个名为Averager的新类。每个
averagerList = new ArrayList<Averager>();
这个类有这个变量
private String wlanAp;
ArrayList<Integer> measurements = new ArrayList<Integer>();
所以在主要方法中,我要浏览txt文件,将wlanAp作为字符串,然后查看是否存在wlanAp的对象
ArrayList<Averager> averagerList = new ArrayList<Averager>;
if (averagerList.contains(WlanAp))
{
//it's already existing, just add a new measurement
mittler.addMeasurement(m.getDb());
}
else
{
averager = new Averager(mWlanAp);
averagerList.add(averager);
averager.addMeasurement(m.getActiveUsers());
}
但我的问题 - 创建了14个对象而不是7个。为什么?而且我不知道如何检查是否已存在具有此String名称的元素
感谢您的帮助,我希望我能覆盖所有......如果不是,请询问
答案 0 :(得分:2)
if (averagerList.contains(WlanAp))
此检查无效,因为WlanAp是String,而averagerList包含Averagers。根据他们的equals方法的实现,这两者并不等同。
您应该使用Map而不是List,地图设计用作从一个值到另一个值的查找,而列表是单个类型的集合。使用地图,您的代码将如下所示:
Averager av = map.get(WlanAp);
if ( av == null ) {
av = new Averager();
map.put( WlanAp, av );
}