diff options
author | Pekka Hyvönen <pekka@vaadin.com> | 2016-12-05 15:17:30 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-12-05 15:17:30 +0200 |
commit | 5b0919ce9e3f8899fb5b0c5331afd9ffa2a56c0c (patch) | |
tree | 383a7687d7b26c38dfeb36ab14548279bfa4a7b9 /server | |
parent | d70cd4c2b616b3243aabcc3e12f3388d4453bbf2 (diff) | |
download | vaadin-framework-5b0919ce9e3f8899fb5b0c5331afd9ffa2a56c0c.tar.gz vaadin-framework-5b0919ce9e3f8899fb5b0c5331afd9ffa2a56c0c.zip |
Add Listing.setItems(Stream) (#90)
* Add Listings.setItems(Stream)
Fixes vaadin/framework8-issues#447
Change-Id: I4d557d346117d308b80a20effbf5359bebe1e8bb
Diffstat (limited to 'server')
-rw-r--r-- | server/src/main/java/com/vaadin/data/Listing.java | 27 | ||||
-rw-r--r-- | server/src/main/java/com/vaadin/server/data/DataProvider.java | 24 |
2 files changed, 50 insertions, 1 deletions
diff --git a/server/src/main/java/com/vaadin/data/Listing.java b/server/src/main/java/com/vaadin/data/Listing.java index 527c913912..0ecc13b3fb 100644 --- a/server/src/main/java/com/vaadin/data/Listing.java +++ b/server/src/main/java/com/vaadin/data/Listing.java @@ -17,7 +17,9 @@ package com.vaadin.data; import java.io.Serializable; import java.util.Collection; +import java.util.stream.Stream; +import com.vaadin.server.data.BackEndDataProvider; import com.vaadin.server.data.DataProvider; /** @@ -51,7 +53,7 @@ public interface Listing<T, D extends DataProvider<T, ?>> extends Serializable { void setDataProvider(D dataProvider); /** - * Sets the collection of data items of this listing. + * Sets the data items of this listing provided as a collection. * <p> * <strong>Note for component developers: </strong> If the component * implementing this interface uses a custom data provider and/or filter @@ -83,4 +85,27 @@ public interface Listing<T, D extends DataProvider<T, ?>> extends Serializable { setDataProvider((D) DataProvider.create(items)); } + /** + * Sets the data items of this listing provided as a stream. + * <p> + * This is just a shorthand for {@link #setItems(Collection)}, by + * <b>collecting all the items in the stream to a list</b>. + * <p> + * <strong>Using big streams is not recommended, you should instead use a + * lazy data provider.</strong> See {@link BackEndDataProvider} for more + * info. + * <p> + * <strong>Note for component developers: </strong> If the component + * implementing this interface uses a custom data provider and/or filter + * types, this method should be overridden to provide the same functionality + * with the correct data provider type. This might require filter conversion + * or a completely custom implementation. + * + * @param streamOfItems + * the stream of data items to display, not {@code null} + */ + default void setItems(Stream<T> streamOfItems) { + setDataProvider((D) DataProvider.create(streamOfItems)); + } + } diff --git a/server/src/main/java/com/vaadin/server/data/DataProvider.java b/server/src/main/java/com/vaadin/server/data/DataProvider.java index ef71378b8f..ad6185b51a 100644 --- a/server/src/main/java/com/vaadin/server/data/DataProvider.java +++ b/server/src/main/java/com/vaadin/server/data/DataProvider.java @@ -19,6 +19,7 @@ import java.io.Serializable; import java.util.Arrays; import java.util.Collection; import java.util.Objects; +import java.util.stream.Collectors; import java.util.stream.Stream; import com.vaadin.server.SerializableFunction; @@ -168,4 +169,27 @@ public interface DataProvider<T, F> extends Serializable { public static <T> ListDataProvider<T> create(T... items) { return new ListDataProvider<>(Arrays.asList(items)); } + + /** + * This method creates a new {@link ListDataProvider} from the given stream. + * The ListDataProvider <b>collects all the items in the stream to a + * list</b>. + * <p> + * This is just a shorthand for using {@link #create(Collection)} after + * collecting the items in the stream to a list with e.g. + * {@code stream.collect(Collectors.toList));}. + * <p> + * <strong>Using big streams is not recommended, you should instead use a + * lazy data provider.</strong> See {@link BackEndDataProvider} for more + * info. + * + * @param <T> + * the data item type + * @param items + * a stream of data items, not {@code null} + * @return a new list data provider + */ + public static <T> ListDataProvider<T> create(Stream<T> items) { + return new ListDataProvider<>(items.collect(Collectors.toList())); + } } |