删除ArrayList中的重复项名称

时间:2017-12-29 17:46:42

标签: java android

请帮帮我。我想从firebase只显示一次用户名。虽然用户在firebase中有多条记录,但我只想查看订单用户的名称。用户可以进行多次订购,但我只想展示他们的名字。

我尝试过很多方法,但不能成功。谁知道这件事?非常感谢你。

This is my firebase

This is the result I get

 public void onCreate(Bundle savedInstanceState) {


        UID = this.getArguments().getString("UID");


        mDatabase = FirebaseDatabase.getInstance().getReference();
        mStorage = FirebaseStorage.getInstance();

        mItems = new ArrayList<>();
        wordDulicate = new ArrayList<>();
        tempList = new ArrayList<>();

        if(UID != null){
            mItemsKey = new ArrayList<>();
            mOrderedItemRef = mDatabase.child("OrderedItem");
            Log.d(TAG, " mOrderedItemRef:" + mOrderedItemRef);
            mOrderedItemVEL =  mOrderedItemRef.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    mItems.clear();
                    mItemsKey.clear();
                    wordDulicate.clear();
                    Log.d(TAG, "onDataChange");
                    for (DataSnapshot d : dataSnapshot.getChildren()) {
                        OrderedItem orderedItem = d.getValue(OrderedItem.class);
                        Log.d(TAG, "orderedItem:" + orderedItem.getUserName());
                        mItems.add(orderedItem);
                        mItemsKey.add(d.getKey());
                    }
                    updateUI();

                }

                @Override
                public void onCancelled (DatabaseError databaseError){
                    Log.d(TAG, "get item databaseError: "+databaseError);
                }
            });
        }
        else{
            Log.d(TAG, "UID: "+UID);

        }
        super.onCreate(savedInstanceState);
    }

    @Override
    public void onDestroy(){
        super.onDestroy();
        //   if (mItemRef != null) mItemRef.removeEventListener(mItemVEL);
    }

    @Override
    public void onDetach(){
        super.onDetach();
        //  if (mItemRef != null) mItemRef.removeEventListener(mItemVEL);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_admin_list_user_order, container, false);
        mItemRecyclerView = (RecyclerView) view.findViewById(R.id.admin_order_recycler_view);
        DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(mItemRecyclerView.getContext(), new LinearLayoutManager(getActivity()).getOrientation());
        mItemRecyclerView.addItemDecoration(dividerItemDecoration);
        mItemRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
        return view;
    }

    private void updateUI(){
        Log.d(TAG, "Enter updateUI(); mItems: " + mItems);
        mAdapter = new ItemAdapter(mItems);
        mItemRecyclerView.setAdapter(mAdapter);
    }

    private class ItemHolder extends RecyclerView.ViewHolder{
        OrderedItem mItems;
        TextView mNameTextView;

        ItemHolder(final View itemView){
            super(itemView);
            mNameTextView = (TextView) itemView.findViewById(R.id.textview_username);


          /*  if (UID != null) {
                itemView.setOnClickListener(new View.OnClickListener() {
                    @SuppressLint("LongLogTag")
                    @Override
                    public void onClick(View view) {
                        Log.d(TAG, "UID != null");
                        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

                        builder
                                .setMessage("Delete This Item?")
                                .setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() {
                                    public void onClick(DialogInterface dialog, int id) {
                                        deleteItem(mItems);
                                    }
                                }).setNegativeButton(R.string.no, new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int id) {
                                // User cancelled the dialog
                            }
                        });

                        AlertDialog dialog = builder.create();
                        dialog.show();
                    }
                });
            }*/
        }

        void bindData(OrderedItem s){
           mItems = s;
           mNameTextView.setText(s.getUserName());



        }
    }

    private class ItemAdapter extends RecyclerView.Adapter<ItemHolder>{
        private ArrayList<OrderedItem> mItems;

        ItemAdapter(ArrayList<OrderedItem> Items){
            mItems = Items;
        }

        @Override
        public ItemHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            LayoutInflater layoutInflater = LayoutInflater.from(getActivity());
            View view = layoutInflater.inflate(R.layout.admin_listed_user_order,parent,false);
            return new ItemHolder(view);
        }

        @Override
        public void onBindViewHolder(ItemHolder holder, int position) {
            OrderedItem s = mItems.get(position);
            holder.bindData(s);
        }

        @Override
        public int getItemCount() {
            return mItems.size();
        }

    }

}

1 个答案:

答案 0 :(得分:0)

由于您依赖于键和值,为什么不使用地图呢?地图有一个键和一个值,您可以通过获取键来检查带有键的项是否存在,而不必遍历列表并查找重复项。

首先你需要初始化它:

Map<String, ArrayList<OrderedItem>> items = new HashMap<>();

该值是一个用于保留任何现有数据的ArrayList

然后把项目:

for (DataSnapshot d : dataSnapshot.getChildren()) {
    OrderedItem orderedItem = d.getValue(OrderedItem.class);
    Log.d(TAG, "orderedItem:" + orderedItem.getUserName());
    items.putIfAbsent(d.getKey(), new ArrayList<>());//create a list if it doesn't exist
    items.get(d.geyKey()).add(orderedItem);//add the item

}

并使用地图清除与列表相同