MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Sintaxe Java com MongoDB


Embora você certamente possa usar o formulário que sugeriu:
for (Document document : col.find()) {
    // do something
}

ele apresenta um problema quando o corpo do loop for lança uma exceção:se isso acontecer, o cursor não será fechado. O idioma apropriado para se proteger disso é usar MongoCursor (que implementa Closeable) explicitamente:
try (MongoCursor<Document> cursor = col.find().iterator()) {
    while (cursor.hasNext()) {
        System.out.println(cursor.next());
    }
}

O método forEach é apenas um pouco de açúcar sintático para evitar a necessidade de o código do aplicativo se preocupar em fechar o cursor manualmente assim.

Se você não quiser criar um novo bloco para cada iteração, você pode refatorar seu código para extrair a criação de classe interna anônima, por exemplo:
Block<Document> block = new Block<Document>() {
    @Override
    public void apply(final Document document) {
        System.out.println(document);
    }
};
col.find().forEach(block);

É claro que isso é ainda mais complicado, então se você puder usar o Java 8, poderá substituir tudo por um lambda:
col.find().forEach((Block<Document>) document -> {
    System.out.println(document);
});

ou neste caso simplesmente:
col.find().forEach((Block<Document>) System.out::println);

A metafábrica lambda garantirá que nenhum objeto desnecessário seja criado.