0

mongodb查询是db.test.find({"col1":{"$ne":""}}).count(),我已经尝试了很多资源来找到解决方案,“col1”必须从列表数组中填充,请帮助我我已经粘贴了我的一部分代码

`

List<String> likey = new ArrayList<String>();

for (DBObject o : out.results())
{
likey.add(o.get("_id").toString()); 
}

Iterator<String>itkey = likey.iterator();

DBCursor cursor ;

//cursor = table.find();

HashMap<String, String> hashmap = new HashMap<String, String>();

while (itkey.hasNext())
{
System.out.println((String)itkey.next());

String keys = itkey.next().toString();

//System.out.println("keys --> "+keys);

String nullvalue = "";

Boolean listone = table.distinct(keys).contains(nullvalue);


hashmap.put(keys, listone.toString());

//System.out.println("distinct --> "+keys+" "+listone);

//System.out.println("proper str --- >"+ '"'+keys+'"'); 
}

Iterator<String> keyIterator = hashmap.keySet().iterator();
Iterator<String> valueIterator = hashmap.values().iterator();

while (keyIterator.hasNext()) {
//System.out.println("key: " + keyIterator.next());


while (valueIterator.hasNext()) {
//System.out.println("value: " + valueIterator.next());

//System.out.println("Key: " + keyIterator.next() +""+"value: "+valueIterator.next());

String hashkey = valueIterator.next();

}

}

`

4

1 回答 1

0

当您发布代码时,如果您缩进它会有所帮助,因此它更具可读性。正如我在另一个论坛上向您提到的,您需要返回并查看 Java 集合类,因为您在上面的代码中有多个使用错误。

以下是清理代码需要做的一些事情:

1)您不需要使用 itkey 迭代器。相反,使用:

for (String key : likey) 

并摆脱所有 itkey.next 电话。您当前的代码仅处理列表的每隔一个元素。其他的都打印出来了。

2)您的 HashMap 会将键映射到布尔值。那是你要的吗?你说你想计算键的非零值的数量。所以,这条线:

Boolean listone = table.distinct(keys).contains(nullvalue);

几乎可以肯定是错误的。

3)当你迭代HashMap时,你不需要valueIterator。相反,获取键(从 keyIterator 或您使用上面更简单的迭代器语法定义的变量),然后使用键通过 hashmap.get(key) 获取匹配值。

这不会使您的代码工作,但它会稍微清理它 - 目前很难理解您打算做什么。

于 2013-09-01T18:33:15.937 回答