从geoQuery向recyclerView添加唯一项

问题描述 投票:0回答:1

我创建了一个显示我附近用户项目的应用。

[我使用geoQuery找到了附近的人,如果他们靠近我,我会在数据库中搜索他们拥有的物品,然后在其中填充recyclerView

我通过使用:

List<DiscoverItems> items = new ArrayList<>();

        GeoQuery geoQuery = geoFire.queryAtLocation(new GeoLocation(Lat, Lon), Radius);
        geoQuery.addGeoQueryEventListener( new GeoQueryEventListener() {
            @Override
            public void onKeyEntered(String key, GeoLocation location) {

                String UserID = key;

                if (!UserID.equals( auth.getUid() )) {
                    db.collection( "Users" ).document( UserID ).collection( "MyItems" ).get().addOnCompleteListener( task_count -> {
                        if (task_count.isSuccessful()) {
                            for (DocumentSnapshot document_near : task_count.getResult()) {
                                items.add(new DiscoverItems( document_near.getString( "ItemID" ) ));
                            }

                        }
                    } );
                }

                discoverItemAdapter = new DiscoverItemAdapter( items, listener );
                rv_NearMeItems.setAdapter( discoverItemAdapter );

            }

            @Override
            public void onKeyExited(String key) {

            }

            @Override
            public void onKeyMoved(String key, GeoLocation location) {

            }

            @Override
            public void onGeoQueryReady() {

            }

            @Override
            public void onGeoQueryError(DatabaseError error) {

            }
        } );

但是,我的问题是,如果某些用户拥有相同的物品,因为当我希望它具有独特的物品时,它将在recyclerView中出现两次。

有什么解决方案可以首先检查我的商品列表是否重复,然后才添加它们?

谢谢

java android google-cloud-firestore geofire
1个回答
0
投票

我不知道您的对象的复杂性,但是您可以尝试将List<> int更改为Set<>

因此更改为:

List<DiscoverItems> items = new ArrayList<>();

进入:

Set<DiscoverItems> items = new HashSet<>();
© www.soinside.com 2019 - 2024. All rights reserved.