0

I have two list of two different model class. I'm adding data in a list when item is clicked in recyclerview. I need to check first that if the data already exist or not. I'm retrieving data from firebase-database first.

here is my code model.getKey() is push id of firebase

    @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();
                }
            }
        });


    }
parag pawar
  • 193
  • 3
  • 13
  • 3
    1) you are not using Java code conventions which is making reading your code harder for others. 2) your `Selected_Member_Model` has to override default `equals` and `hashCode` methods for `sList.contains(seleted_model)` to work correctly in your case – Vladyslav Matviienko Jun 13 '18 at 05:53

1 Answers1

0

If you are using Java 8, perhaps you could try something like this:

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

}

Or alternatively, you could try something like this:

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

}

This method will return true if the List contains a MyObject with the name name. If you want to perform an operation on each of the MyObjects that getName().equals(name), then you could try something like this:

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

}