【问题标题】:Check model data exist in the ArrayList检查模型数据是否存在于 ArrayList 中
【发布时间】:2018-06-13 05:47:24
【问题描述】:

我有两个不同模型类的两个列表。在recyclerview 中单击项目时,我正在列表中添加数据。我需要先检查数据是否已经存在。我首先从firebase-database 检索数据。

这是我的代码 model.getKey() 是 firebase 的推送 ID

    @Override
    public void onBindViewHolder(final User_MemberHolder holder, int position) {
        final UserModel_member_DP_NAME model = mList.get(position);

        holder.txt.setText(model.getName());
        Picasso.with(holder.itemView.getContext()).load(model.getDp()).into(holder.img);

        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Selected_Member_Model seleted_model = new Selected_Member_Model(model.getKey(),model.getName());

                if(!sList.contains(seleted_model)) {

                    sList.add(seleted_model);

                    Toast.makeText(view.getContext(), "added ", Toast.LENGTH_SHORT).show();
                    //change background if selected
                    holder.itemView.setBackground(getResources().getDrawable(R.color.chat_cardview_color)); 

                }else{
                    Toast.makeText(view.getContext(), "selected already", Toast.LENGTH_SHORT).show();
                }
            }
        });


    }

【问题讨论】:

  • 1) 您没有使用 Java 代码约定,这使得其他人更难阅读您的代码。 2) 你的Selected_Member_Model 必须覆盖默认的equalshashCode 方法,sList.contains(seleted_model) 才能在你的情况下正常工作

标签: android arraylist android-recyclerview


【解决方案1】:

如果您使用的是 Java 8,也许您可​​以尝试以下方法:

public boolean containsName(final List<MyObject> list, final String name){
return list.stream().filter(o -> o.getName().equals(name)).findFirst().isPresent();

}

或者,您可以尝试这样的方法:

public boolean containsName(final List<MyObject> list, final String name){
return list.stream().map(MyObject::getName).filter(name::equals).findFirst().isPresent();

}

如果 List 包含名称为 name 的 MyObject,此方法将返回 true。如果您想对 getName().equals(name) 的每个 MyObjects 执行操作,那么您可以尝试这样的操作:

public void perform(final List<MyObject> list, final String name){
return list.stream().filter(o -> o.getName().equals(name)).forEach(
        o -> {
            //...
        }
);

}

【讨论】:

    猜你喜欢
    • 2015-07-12
    • 2011-05-30
    • 1970-01-01
    • 2011-05-23
    • 2016-11-30
    • 2018-03-02
    • 2018-11-16
    • 1970-01-01
    相关资源
    最近更新 更多