如何跳过已在arrayList中传递的项目

时间:2017-06-22 22:44:14

标签: android for-loop firebase arraylist firebase-realtime-database

我正在迭代firebase中的列表,它的工作方式类似于arrayList 我使用for循环迭代chlidrens,因为它将在列表中完成,我使用此代码随机迭代

    FirebaseUtils.getMeetPeopleListCityReference(ciudadX).orderByKey().addValueEventListener(new ValueEventListener() {
                    @Override
                    public void onDataChange(final DataSnapshot dataSnapshot) {
                        if (dataSnapshot != null) {
                            Random random = new Random();
                            final int index = random.nextInt((int) dataSnapshot.getChildrenCount());
                            int count = 0;
                            for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
                                if (count == index) {
                                    final MeetPeopleList mee = snapshot.getValue(MeetPeopleList.class);

                                    if (mee.getIDentificador().equals(firebaseUser.getUid())) {
                                        // nothing, are you
                                    } else {
                                        testData.add(mee);
                                        adapter.notifyDataSetChanged();
                                        return;
                                    }
                                }
                                count++;
                            }
                        }
                    }

                    @Override
                    public void onCancelled(DatabaseError databaseError) {

                    }
                });

但这是重要的代码 它做的是随机迭代,这里是问题

我需要它迭代列表,不要重复将列出的对象

我将举一个例子: 代码按下按钮,按下它显示整个项目列表,屏幕上显示一个随机项目,但有时再次点击显示与之前显示的相同,我不需要显示已经显示的对象

    Random random = new Random();
                            final int index = random.nextInt((int) dataSnapshot.getChildrenCount());
                            int count = 0;
                            for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
                                if (count == index) {
                                    final MeetPeopleList mee = snapshot.getValue(MeetPeopleList.class);

                                    if (mee.getIDentificador().equals(firebaseUser.getUid())) {
                                        // nothing, are you
                                    } else {
                                        testData.add(mee);
                                        adapter.notifyDataSetChanged();
                                        return;
                                    }
                                }
                                count++;
                            }

1 个答案:

答案 0 :(得分:1)

OnDataChange商店内,还有Map<String, Boolean>等数据结构中儿童的键。在您的代码中,您只需要初始化一个名为myMap的新Map,并在for循环中添加此行:

myMap.put(snapshot.getKey(), true)

然后,在“随机方法”中,检查您的密钥的myMap值是否仍为true。然后在使用带有该键的元素后将布尔值设置为false