迭代两个<iterable>对象来比较它们之间的数据

时间:2017-05-24 00:35:32

标签: android firebase firebase-realtime-database iterable

我正在使用firebase数据库和android studio。

我正在推荐系统。数据库有26个旅行目的地,每个目的地都有一些属(活动,地区,天气,一年中的时间) 目的地号码1:[https://i.stack.imgur.com/hrkpP.png] 那些价值永远不会改变。

另一方面。我问人们一系列问题,他们正在保存在数据库中。对问题1,2和3的回答:[https://i.stack.imgur.com/HJgMn.png]

如果响应与目标功能有任何共同之处,我想查看响应。如果确实如此,我想增加一个名为score的int(我还创建了一个arraylist Destination:使用名称,来自目标db的id,并且还有一个int分数)

Firebase让我从一个有很多孩子的孩子那里得到一个。

Iterable<DataSnapshot> destinosHijos = dataSnapshot.child("destinos").getChildren();
Iterable<DataSnapshot> destinosRes = dataSnapshot.child("respuestas").child(codigo).child(user).getChildren();

如果我想迭代两个列表并比较它们之间的东西,我会做这样的事情(hypotecally)

for(int i=0;i<destinationsDB.size();i++){
        for(int j=0;j<responsesDB.size();j++){
            String destinationR=destinationsDB.get(i).getRegion();
            String responsesR=responsesDB.get(j).getRegion();
            if(destinationR.equals(responsesR){
                score++;
            }
        }
    }

我不能对de foreach做同样的事。我试图获得所有目的地的区域和所有具有“区域”的响应。但是当我在另一个内部使用foreach时,与forloop

不一样

如果我尝试。

for (DataSnapshot hijo : destinosHijos) {
// all of the regions from all of the destinations
            String destinoRegion= hijo.child("region").getValue().toString

        }

        for (DataSnapshot res : destinosRes) {
            // all the responses with "region" on them
            if (res.child("region").exists()) {
                if(res.child("region").getValue.equals(destinoRegion)){
                    score++;
                }
            }
        }
    }
}

我修改了它,因为实际的是更长的时间。

反正。当我尝试println - res.child(“region”)。getValue.equals(region) - 它只打印2次错误的时间。这是2个响应,上面有“区域”。

而不是printint 2 * 26 = 72次,这将使每个响应与每个目的地进行比较(这就是forloop会做的)。

如果您阅读了所有内容,请提前感谢您。

0 个答案:

没有答案