Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
for-each中的for-each-Java_Java_Android_For Loop - Fatal编程技术网

for-each中的for-each-Java

for-each中的for-each-Java,java,android,for-loop,Java,Android,For Loop,我的代码不会运行pass first for{}循环,这就是为什么idFromArray是空的,因为在向数据库添加tweet之前,我不会在那里添加任何内容 即使在数组中有什么东西,它也会将整个东西循环两次(DUH!因为我有两个循环),这使得数据库中的tweet信息非常多 这不是简单地比较两条tweets id,而只是忽略具有相同id的tweets 我很确定这个问题有一个非常简单的解决方案,但我还是不能完全理解。有人吗 更新: 我想要的是代码忽略已经在数据库中的tweetId。 只需插入数据库中没

我的代码不会运行pass first for{}循环,这就是为什么idFromArray是空的,因为在向数据库添加tweet之前,我不会在那里添加任何内容

即使在数组中有什么东西,它也会将整个东西循环两次(DUH!因为我有两个循环),这使得数据库中的tweet信息非常多

这不是简单地比较两条tweets id,而只是忽略具有相同id的tweets

我很确定这个问题有一个非常简单的解决方案,但我还是不能完全理解。有人吗

更新:

我想要的是代码忽略已经在数据库中的tweetId。 只需插入数据库中没有的tweet


我不认为我应该有两个for循环,我认为第二个循环应该被替换成什么?(或者可能我错了?

您的语法不正确。应该是这样的:

for (Tweet tweet : tweets) {                
    for(long forId : idFromArray){
        long tweetId = tweet.getId();
        if(forId != tweetId){
            String twitterString = tweet.getText();
            db.insertTwitter(twitterString, tweetId);
        }
    }
}
编辑
此答案已更新,因此不再真正回答问题;)

最简单的解决方案是设置一个布尔变量。如果在执行insert语句的地方设置为true,然后在OUTER循环中检查此项,如果布尔值为true,则在那里插入tweet

for (Tweet tweet : tweets) {              
    for(long forId : idFromArray){
        long tweetId = tweet.getId();
        if(forId != tweetId){
            String twitterString = tweet.getText();
            db.insertTwitter(twitterString);
        }
    }
}
应该是

for (Tweet : tweets){ ...
所以你真的想要:

for(Tweet tweet: tweets){...
如果是这样,就用你的编程语言写下来。 提示:数组上的循环将在插入之前完成,这取决于结果


您要测试的是,并非所有数组元素都等于当前数组元素。但是您的for循环不能做到这一点。

如果我理解正确,您希望在伪代码中执行以下操作:

for each tweet
    unless tweet is in db
        insert tweet
我假设您的db类实际上使用sqlite数据库作为后端?您可以直接实现
containsTweet
,每次只查询数据库,但这似乎不够完美。如果我们按照您的基本代码来做,最简单的解决方案就是在tweet周围保留一个索引集。因为我不能确定
Tweet
equals()
方法是什么样子,所以我将把标识符存储在那里。然后你会得到:

for (Tweet tweet : tweets) {
    if (!db.containsTweet(tweet.getId())) {
        db.insertTweet(tweet.getText(), tweet.getId());
    }
}
然后处理它

// if tweets is a List
Collections.sort(tweets, new Comparator() {
    public int compare (Object t1, Object t2) {
        // might be the wrong way around
        return ((Tweet)t1).getId() - ((Tweet)t2).getId();
    }
}

是的,您可以使用第二个for循环来实现这一点,但是您会比使用这种方法更快地遇到性能问题(当然,我们在这里所做的是用时间换取内存性能)。

为什么不先解释一下您想要做什么?很明显,你在寻找一种算法,而与for循环的工作方式无关。你到底想做什么?嘿,这和我写的不一样吗?也许我是瞎子:PFirst foreach,你错过了一条“tweet”。您只有Tweet类,但还需要Tweet对象。这种情况经常发生在我身上。这实际上是我在代码中写的,但由于我在示例中对其进行了精简,所以不知何故也丢失了它。对不起!我想我只是成为了一个更好的程序员。谢谢你!
// if tweets is a List
Collections.sort(tweets, new Comparator() {
    public int compare (Object t1, Object t2) {
        // might be the wrong way around
        return ((Tweet)t1).getId() - ((Tweet)t2).getId();
    }
}
Integer oldId;
for (Tweet tweet : tweets) {
    if (oldId == null || oldId != tweet.getId()) {
        db.insertTweet(tweet.getText(), tweet.getId());
    }
    oldId = tweet.getId();
}