如果对象存在则更新arraylist [英] Updating an arraylist if the object exists

查看:96
本文介绍了如果对象存在则更新arraylist的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

需要有关如何更新列表的帮助.我有一个用字符串名称,字符串状态,浮点数和浮点数长的对象来定义对象的类.

Need some help on how to update a list. I've got a class which defines the object with string name, string status, float lat and float long.

每次玩家移动服务器时,都会向我发送异步消息,其中包含这些变量,唯一改变的可能是状态lat和long,这就是我要覆盖"的状态.这个名字是唯一的,所以我猜我必须基于此进行搜索,因为那是永远不变的事情.我想更新现有对象,以防止一个玩家再发生一次.

Every time a player moves a server sends me an asynchronous message whit these variables, the only thing changing can be status lat and long which are the ones I want to "overwrite". The name is unique so I'm guessing I have to search based on that as that's the thing never changing. I want to update the existing object to prevent one player from occurring more then once.

到目前为止,我的(非功能性)代码:

My (non functional) code so far:

    if(players.size()==0){ ///// 1.
                        Player p  = new Player();
                        p.name = split[2];
                        p.status = split[3];
                        p._lat = Float.valueOf(split[4]);
                        p._long = Float.valueOf(split[5]);
                        players.add(p);
                    }//This works


                    else{ ///// 2.
                    for(int i = 0; i < players.size(); i++){ ///// 3.
                        if(players.get(i).name.equals(split[2])){
                            Player p  = new Player();
                            p.name = split[2];
                            p.status = split[3];
                            p._lat = Float.valueOf(split[4]);
                            p._long = Float.valueOf(split[5]);
                            players.add(p);
                            players.add(i, p);
                        }
                        else{ ///// 4.
                            Player p  = new Player();
                            p.name = split[2];
                            p.status = split[3];
                            p._lat = Float.valueOf(split[4]);
                            p._long = Float.valueOf(split[5]);
                            players.add(p);
                        }
                    }//This doesnt
                    }

这可能很明显,但是我真的不知道如何搜索和替换对象.我需要的功能是:

It's probably something obvious but I don't really know how to search and replace an object. The functionality I'm after is:

  1. 检查列表是否为空,在这种情况下不能加入任何玩家,只需添加一个.
  2. 如果列表存在,请遍历列表并查找对象的名称.
  3. 如果名称存在,只需再次创建相同的播放器,但其更新值在相同的索引上即可.
  4. 该列表存在,但找不到名称,因此只需添加播放器即可.

到目前为止,我的代码使我陷入了一个永无止境的循环中,因为该应用程序停止了响应. split变量是从异步调用(即名称)中分离出的一个单词,我已经通过打印检查了它.

My code so far puts me in an never ending loop I'm guessing since the app stops responding. The split variable is one word split up from the asynchronous call which is the name, this I've checked by printing it.

推荐答案

而不是

players.add(p);
players.add(i, p);

使用

players.set(i, p)

这篇关于如果对象存在则更新arraylist的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆