Browse Source

DATAMONGO-1739 - Changed TerminatingFindOperation.stream() to return Stream.

TerminatingFindOperation.stream() now returns a Stream directly, leveraging Spring Data Commons' StreamUtils.createStreamFromIterator(…) to create a Stream and register a callback to forward calls to Stream.close() to the iterator.

Original pull request: #485.
pull/485/merge
Oliver Gierke 9 years ago committed by Mark Paluch
parent
commit
e1f19f69bd
  1. 8
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/ExecutableFindOperation.java
  2. 6
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/ExecutableFindOperationSupport.java
  3. 13
      spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/ExecutableFindOperationSupportTests.java

8
spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/ExecutableFindOperation.java

@ -17,11 +17,11 @@ package org.springframework.data.mongodb.core; @@ -17,11 +17,11 @@ package org.springframework.data.mongodb.core;
import java.util.List;
import java.util.Optional;
import java.util.stream.Stream;
import org.springframework.data.geo.GeoResults;
import org.springframework.data.mongodb.core.query.NearQuery;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.util.CloseableIterator;
/**
* {@link ExecutableFindOperation} allows creation and execution of MongoDB find operations in a fluent API style.
@ -111,10 +111,10 @@ public interface ExecutableFindOperation { @@ -111,10 +111,10 @@ public interface ExecutableFindOperation {
/**
* Stream all matching elements.
*
* @return a {@link CloseableIterator} that wraps the a Mongo DB {@link com.mongodb.Cursor} that needs to be closed.
* Never {@literal null}.
* @return a {@link Stream} that wraps the a Mongo DB {@link com.mongodb.Cursor} that needs to be closed. Never
* {@literal null}.
*/
CloseableIterator<T> stream();
Stream<T> stream();
/**
* Get the number of matching elements.

6
spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/ExecutableFindOperationSupport.java

@ -19,6 +19,7 @@ import lombok.RequiredArgsConstructor; @@ -19,6 +19,7 @@ import lombok.RequiredArgsConstructor;
import java.util.List;
import java.util.Optional;
import java.util.stream.Stream;
import org.bson.Document;
import org.springframework.dao.IncorrectResultSizeDataAccessException;
@ -26,6 +27,7 @@ import org.springframework.data.mongodb.core.query.NearQuery; @@ -26,6 +27,7 @@ import org.springframework.data.mongodb.core.query.NearQuery;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.SerializationUtils;
import org.springframework.data.util.CloseableIterator;
import org.springframework.data.util.StreamUtils;
import org.springframework.util.Assert;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
@ -135,8 +137,8 @@ class ExecutableFindOperationSupport implements ExecutableFindOperation { @@ -135,8 +137,8 @@ class ExecutableFindOperationSupport implements ExecutableFindOperation {
}
@Override
public CloseableIterator<T> stream() {
return doStream();
public Stream<T> stream() {
return StreamUtils.createStreamFromIterator(doStream());
}
@Override

13
spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/ExecutableFindOperationSupportTests.java

@ -22,6 +22,8 @@ import static org.springframework.data.mongodb.core.query.Query.*; @@ -22,6 +22,8 @@ import static org.springframework.data.mongodb.core.query.Query.*;
import lombok.AllArgsConstructor;
import lombok.Data;
import java.util.stream.Stream;
import org.junit.Before;
import org.junit.Test;
import org.springframework.dao.IncorrectResultSizeDataAccessException;
@ -33,7 +35,6 @@ import org.springframework.data.mongodb.core.index.GeospatialIndex; @@ -33,7 +35,6 @@ import org.springframework.data.mongodb.core.index.GeospatialIndex;
import org.springframework.data.mongodb.core.mapping.Field;
import org.springframework.data.mongodb.core.query.BasicQuery;
import org.springframework.data.mongodb.core.query.NearQuery;
import org.springframework.data.util.CloseableIterator;
import com.mongodb.MongoClient;
@ -168,7 +169,7 @@ public class ExecutableFindOperationSupportTests { @@ -168,7 +169,7 @@ public class ExecutableFindOperationSupportTests {
@Test // DATAMONGO-1563
public void streamAll() {
try (CloseableIterator<Person> stream = template.query(Person.class).stream()) {
try (Stream<Person> stream = template.query(Person.class).stream()) {
assertThat(stream).containsExactlyInAnyOrder(han, luke);
}
}
@ -176,7 +177,7 @@ public class ExecutableFindOperationSupportTests { @@ -176,7 +177,7 @@ public class ExecutableFindOperationSupportTests {
@Test // DATAMONGO-1563
public void streamAllWithCollection() {
try (CloseableIterator<Human> stream = template.query(Human.class).inCollection(STAR_WARS).stream()) {
try (Stream<Human> stream = template.query(Human.class).inCollection(STAR_WARS).stream()) {
assertThat(stream).hasSize(2);
}
}
@ -184,7 +185,7 @@ public class ExecutableFindOperationSupportTests { @@ -184,7 +185,7 @@ public class ExecutableFindOperationSupportTests {
@Test // DATAMONGO-1563
public void streamAllWithProjection() {
try (CloseableIterator<Jedi> stream = template.query(Person.class).as(Jedi.class).stream()) {
try (Stream<Jedi> stream = template.query(Person.class).as(Jedi.class).stream()) {
assertThat(stream).hasOnlyElementsOfType(Jedi.class).hasSize(2);
}
}
@ -192,9 +193,7 @@ public class ExecutableFindOperationSupportTests { @@ -192,9 +193,7 @@ public class ExecutableFindOperationSupportTests {
@Test // DATAMONGO-1563
public void streamAllBy() {
try (CloseableIterator<Person> stream = template.query(Person.class).matching(query(where("firstname").is("luke")))
.stream()) {
try (Stream<Person> stream = template.query(Person.class).matching(query(where("firstname").is("luke"))).stream()) {
assertThat(stream).containsExactlyInAnyOrder(luke);
}
}

Loading…
Cancel
Save