如果对象存在,则更新arraylist

nej*_*ejs 1 android arraylist

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

每次玩家移动服务器时都会向我发送一条异步消息,这些变量只能是状态lat和long,这些都是我想要"覆盖"的.这个名字是独一无二的,所以我猜我必须根据它进行搜索,因为这是永远不会改变的事情.我想更新现有对象以防止一个玩家发生一次以上.

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

    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
                    }
Run Code Online (Sandbox Code Playgroud)

它可能是显而易见的,但我真的不知道如何搜索和替换对象.我所追求的功能是:

  1. 检查列表是否为空,在这种情况下,不能有播放器,所以只需添加一个.
  2. 如果列表存在循环,并查找对象的名称.
  3. 如果名称存在,只需再次创建相同的播放器,但其更新值在同一索引处.
  4. 列表存在,但找不到名称,所以只需添加播放器即可.

到目前为止,我的代码将我置于一个永无止境的循环中,我猜是因为应用程序停止响应.拆分变量是从异步调用中分离出来的一个单词,也就是名称,我通过打印来检查它.

小智 5

代替

players.add(p);
players.add(i, p);
Run Code Online (Sandbox Code Playgroud)

使用

players.set(i, p)
Run Code Online (Sandbox Code Playgroud)