Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.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 如何调用和包含ArrayList<;对象>;_Java_Arraylist - Fatal编程技术网

Java 如何调用和包含ArrayList<;对象>;

Java 如何调用和包含ArrayList<;对象>;,java,arraylist,Java,Arraylist,我有一个像这样的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

我有一个像这样的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接入点名称(wlan_AP)和当前活动用户的数量

如您所见,每个接入点都有多个测量值(例如,lcb kasse)

我希望在我的程序结束时获得活动用户的平均数量

因此,我创建了一个名为Averager的新类。每

averagerList = new ArrayList<Averager>();
averagerList=newarraylist();
这个类有这个变量

private String wlanAp;  
ArrayList<Integer> measurements = new ArrayList<Integer>();
私有字符串wlanAp;
ArrayList测量值=新的ArrayList();
在main方法中,我将遍历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());  
}
ArrayList averagerList=新建ArrayList;
if(averagerList.contains(WlanAp))
{
//它已经存在,只需添加一个新的度量值
mittler.addMeasurement(m.getDb());
}
其他的
{
平均值=新平均值(mWlanAp);
添加(平均器);
averager.addMeasurement(m.getActiveUsers());
}
但是我的问题——它创建了14个对象,而不是7个。为什么?我不知道如何检查是否已经存在具有此字符串名称的元素

谢谢你的帮助,我希望我涵盖了所有。。如果不是的话,就问吧

if (averagerList.contains(WlanAp))
此检查不起作用,因为WlanAp是字符串,而averagerList包含Averager。从equals方法的实现来看,这两种方法并不等价

您应该使用映射而不是列表,映射被设计为从一个值到另一个值的查找,而列表是单一类型的集合。使用映射,您的代码如下所示:

Averager av = map.get(WlanAp);
if ( av == null ) {
    av = new Averager();
    map.put( WlanAp, av );
}
很好的回答,检查地图类,它应该澄清它的用法。