Предположим, что наша работа над веткой «контакт-форма» выполнена, и мы уже интегрировали ее в «master». Поскольку это нам больше не нужно, мы можем удалить его (локально):
blockquote>$ git branch -d contact-form
И для удаления удаленной ветви:
git push origin --delete contact-form
Кажется, что вы используете новый итератор каждый раз, когда вы обращаетесь к полю в DBObject
, т. е. вы используете list.iterator()
несколько раз в цикле. list.iterator().next()
возвращает вам первый элемент в коллекции. Таким образом, вы получаете доступ к первому DBObject
.
Попробуйте следующее:
Iterable<DBObject> list= output.results();
while(list.iterator().hasNext()){
DBObject obj = list.iterator().next();
String id = obj.get("_id");
int times = Integer.parseInt(obj.get("times").toString());
System.out.println("ID IS "+id+" time: "+times);
}
Или, возможно, используйте цикл foreach:
for (DBObject obj : output.results()) {
String id = obj.get("_id");
int times = Integer.parseInt(obj.get("times").toString());
System.out.println("ID IS "+id+" time: "+times);
}
Один из возможных недостатков вашего кода заключается в том, что вы вызываете метод Iterator.next () несколько раз. Сохраните его значение в переменной и используйте переменную вместо вызова несколько раз.
Например:
DBObject obj = list.iterator().next();
String id = (String) obj.get("_id");
int times = Integer.parseInt(obj.get("times").toString());`
Я знаю, это старый поток, и на него уже ответили, но ответы - это оптимизация. Фактическая причина , почему вы получаете повторяющиеся ответы, заключается в том, что каждый раз, когда вы запрашиваете .iterator (), он возвращает обратно объект итератора, который начинается с верхней части списка.
Поэтому условие while while:
list.iterator().hasNext()
всегда будет возвращать true. Соответственно, последующий
list.iterator().next()
всегда будет возвращать первый элемент.
Что должно быть сделано:
AggregationOutput output = coll.aggregate( match1, unwind, match2, group, sort, limit);
Iterable<DBObject> list= output.results();
Iterator<DBObject> iterator= list.iterator();
while(iterator.hasNext()){
DBObject obj = iterator.next();
String id = (String) obj.get("_id");
int times = Integer.parseInt(obj.get("times").toString());
System.out.println("ID IS "+id+" time: "+times);
}
Но технически, для цикла, упомянутого @Aqua, много более чистого использования. Этот ответ заключался лишь в том, чтобы разъяснить, почему, а не как.