Skip to content
This repository was archived by the owner on Oct 13, 2020. It is now read-only.

Commit 225c8e3

Browse files
committed
#68 - ENH: Add delegate methods for findStream / findLargeStream
1 parent a8d79ee commit 225c8e3

4 files changed

Lines changed: 95 additions & 10 deletions

File tree

pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88

99
<parent>
1010
<groupId>org.avaje</groupId>
11-
<artifactId>java8-parent</artifactId>
12-
<version>1.4</version>
11+
<artifactId>java8-oss</artifactId>
12+
<version>2.1</version>
1313
</parent>
1414

1515
<scm>

src/main/java/io/ebean/typequery/TQRootBean.java

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
import java.util.Set;
3939
import java.util.function.Consumer;
4040
import java.util.function.Predicate;
41+
import java.util.stream.Stream;
4142

4243
/**
4344
* Base root query bean.
@@ -1600,6 +1601,52 @@ public List<T> findList() {
16001601
return query.findList();
16011602
}
16021603

1604+
/**
1605+
* Execute the query returning the result as a Stream.
1606+
* <p>
1607+
* Note that this will hold all resulting beans in memory using a single
1608+
* persistence context. Use findLargeStream() for queries that expect to
1609+
* return a large number of results.
1610+
* </p>
1611+
* <pre>{@code
1612+
*
1613+
* // use try with resources to ensure Stream is closed
1614+
*
1615+
* try (Stream<Customer> stream = query.findStream()) {
1616+
* stream
1617+
* .map(...)
1618+
* .collect(...);
1619+
* }
1620+
*
1621+
* }</pre>
1622+
*/
1623+
@Nonnull
1624+
public Stream<T> findSteam() {
1625+
return query.findStream();
1626+
}
1627+
1628+
/**
1629+
* Execute the query returning the result as a Stream.
1630+
* <p>
1631+
* Note that this uses multiple persistence contexts such that we can use
1632+
* it with a large number of results.
1633+
* </p>
1634+
* <pre>{@code
1635+
*
1636+
* // use try with resources to ensure Stream is closed
1637+
*
1638+
* try (Stream<Customer> stream = query.findLargeStream()) {
1639+
* stream
1640+
* .map(...)
1641+
* .collect(...);
1642+
* }
1643+
*
1644+
* }</pre>
1645+
*/
1646+
public Stream<T> findLargeStream() {
1647+
return query.findLargeStream();
1648+
}
1649+
16031650
/**
16041651
* Execute the query returning the set of objects.
16051652
* <p>
Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,19 @@
11
package org.example.domain;
22

3-
import javax.validation.constraints.AssertTrue;
4-
import javax.xml.ws.Action;
5-
import javax.xml.ws.soap.Addressing;
63
import java.util.ArrayList;
74

8-
@Addressing
95
public class SomePojo {
106

11-
@AssertTrue
127
String name;
138

149
ArrayList<String> foos = new ArrayList<>();
15-
16-
@Action
10+
1711
public String getName() {
1812
return name;
1913
}
2014

2115
public void setName(String name) {
2216
this.name = name;
2317
}
24-
18+
2519
}

src/test/java/org/querytest/QCustomerTest.java

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@
3232
import java.util.Map;
3333
import java.util.Optional;
3434
import java.util.Set;
35+
import java.util.StringJoiner;
36+
import java.util.stream.Stream;
3537

3638
import static org.assertj.core.api.Assertions.assertThat;
3739
import static org.example.domain.query.QAddress.Alias.country;
@@ -289,6 +291,48 @@ public void testFindOne() {
289291
.findList();
290292
}
291293

294+
private void insertCustomer(String name) {
295+
Customer cust = new Customer();
296+
cust.setName(name);
297+
cust.setStatus(Customer.Status.GOOD);
298+
cust.save();
299+
}
300+
301+
@Test
302+
public void testFindStream() {
303+
insertCustomer("stream1");
304+
insertCustomer("stream2");
305+
306+
StringJoiner sb = new StringJoiner("|");
307+
try (Stream<Customer> stream = new QCustomer()
308+
.name.startsWith("stream")
309+
.id.asc()
310+
.findSteam()) {
311+
312+
stream.forEach(it -> sb.add(it.getName()));
313+
}
314+
315+
assertThat(sb.toString()).isEqualTo("stream1|stream2");
316+
}
317+
318+
@Test
319+
public void testFindLargeStream() {
320+
insertCustomer("largeStream1");
321+
insertCustomer("largeStream2");
322+
insertCustomer("largeStream3");
323+
324+
StringJoiner sb = new StringJoiner("|");
325+
try (Stream<Customer> stream = new QCustomer()
326+
.name.startsWith("largeStream")
327+
.id.asc()
328+
.findSteam()) {
329+
330+
stream.forEach(it -> sb.add(it.getName()));
331+
}
332+
333+
assertThat(sb.toString()).isEqualTo("largeStream1|largeStream2|largeStream3");
334+
}
335+
292336
@Test
293337
public void testFilterMany() {
294338

0 commit comments

Comments
 (0)