将arraylist中的新对象添加到另一个arraylist中,而第二个则没有这些新对象

时间:2019-04-03 15:23:09

标签: java arraylist

如果我有两个ArrayList,一个是currentScanWifiList<Router> 这包含当前的wifi扫描路由器数据 第二个具有相同的类型allUniqueRoutersList<Router> 用于添加currentScanWifiList中现有的新路由器,并且不存在于allUniqueRoutersList中 通过等于其bssid

进行路由器之间的比较

public class Router {
    private String bssid;//identifier
    private String ssid;
    private double x;
    private double y;
    private double meanRss;
setter and getter....
}
    for (int x = 0; x < currentScanList.size(); x++) {
        Router currentTempRouter = currentScanList.get(x);
        for (int y = 0; y < allUniqueRoutersList.size(); y++) {
            Router allTempRouter = currentScanList.get(y);
            if (!currentTempRouter.getBssid().equals(allTempRouter.getBssid())) {
                allUniqueRoutersList.add(currentScanList.get(x));
                break;
            } 
        }
    }

我尝试了这段代码,但是它不起作用,它将所有对象添加到allUniqueRoutersList 不只是新的 我应该怎么做才能使用bssid在两个arraylist元素之间进行比较

2 个答案:

答案 0 :(得分:1)

这是因为您立即添加了路由器,例如你真的不会循环:

<button class="btn" type="submit" name="EditSubmit" id="EditSubmit" value="12345">Edit&Submit</button>

答案 1 :(得分:0)

bssid中的allUniqueRoutersList存储在集合中,并在currentScanList上进行迭代,并检查bssid是否在集合中,如果没有,则将路由器添加到集合中您的allUniqueRoutersList

Set<String> bssidSet = allUniqueRoutersList.stream()
                      .map(router->router.getBssid())
                      .collect(Collectors.toSet());

  for(Router r : currentScanList){
        if(!bssidSet.contains(r.getBssid())){
            allUniqueRoutersList.add(r);
        }
    }