如果其中已经存在相同值的对象,请替换ArrayList的元素

时间:2018-12-08 05:47:59

标签: java arraylist socket.io

我正在将socket.io用于我的聊天应用程序。我有一个ArrayList,其中包含最后一条消息,用户名,时间。每当新消息以JSON格式到达时,它都应检查ArrayList中是否存在包含JSON的用户名。如果存在,则更新ArrayList,否则添加ArrayList。 这是我的代码:-

private Emitter.Listener handle1 = new Emitter.Listener() {
    @Override
    public void call(final Object... args) {
        ChatLists.this.runOnUiThread(new Runnable() {
            @Override
            public void run() {

                JSONObject data = (JSONObject)args[0];
                try {
                    String sendername = data.getString("sender");
                    String lastMessage = data.getString("message");
                    String profileImage = data.getString("Profile");
                    String token = data.getString("fb_token");
                    chat_list chat_list = new chat_list(sendername,
                            profileImage, lastMessage, "0", "", "dummy", token);


                    if (chat_lists.size()==0){
                        chat_lists.add(chat_list);
                    }else {
                        for (int i=0;i<chat_lists.size();i++){
                            if (chat_lists.get(i).getContactname().equals(sendername)){
                                chat_lists.set(i,chat_list);
                            }else {
                                chat_lists.add(chat_list)
                            }
                        }

                    }
                    contactlistAdapter = new ContactlistAdapter(chat_lists);
                    recyclerView.setAdapter(contactlistAdapter);
                    contactlistAdapter.notifyDataSetChanged();


                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
            }
        });
    }
};

4 个答案:

答案 0 :(得分:0)

好吧,您可以按照逻辑方式使用ArrayList的contains()set()方法来解决您的问题,如下所示:-

if(chat_lists.contains(username)) 
 chat_lists.set(indexOf(username), new_username);

else chat_lists.add(new_username);

答案 1 :(得分:0)

尝试一下:

if(chat_lists.contains(chat_list)){
  chat_lists.remove(chat_list);
  chat_lists.add(chat_list);
} else {
  chat_lists.add(chat_list);
}

答案 2 :(得分:0)

阅读有关体系结构模式的信息,例如MVP。 您需要将消息存储在某处(在模型中),并更新相对于数据的视图。

还阅读了有关RecyclerView的信息,原因是ListView有点过时了

答案 3 :(得分:-1)

if (chat_lists.get(i).getContactname().equals(sendername)){

以上陈述使他们有问题。并没有达到您的if条件,而是遵循chat_lists.add(chat_list)语句。

相反,equals使用ignoreCasequals。如果仍然无法解决您的问题,请使用调试模式或日志检查chat_lists.get(i).getContactname()sendername是否相同。