【问题标题】:How to skip an item that has already been passed in an arrayList如何跳过已经在arrayList中传递的项目
【发布时间】:2017-11-26 09:14:22
【问题描述】:

我正在遍历 firebase 中的列表,它的工作方式类似于 arrayList 我使用 for 循环来迭代 chlidren,就像在列表中完成一样,我让它们用这段代码随机迭代

    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++;
                            }

【问题讨论】:

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


    【解决方案1】:

    在您的OnDataChange 中,还将孩子的键存储在Map<String, Boolean> 之类的数据结构中。在您的代码中,您只需初始化一个名为 myMap 的新 Map 并将此行添加到您的 for 循环中:

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

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

    【讨论】:

    • 我不是很明白怎么实现,请你给我解释清楚对我有很大帮助
    猜你喜欢
    • 2019-07-10
    • 1970-01-01
    • 2014-03-02
    • 1970-01-01
    • 2017-01-31
    • 2021-04-14
    • 1970-01-01
    • 2022-11-27
    • 1970-01-01
    相关资源
    最近更新 更多