Which is the best way to create a stream out of a collection:
final Collection<String> entities = someService.getArrayList();
entities.stream();
Stream.of(entities);
Which is the best way to create a stream out of a collection:
final Collection<String> entities = someService.getArrayList();
entities.stream();
Stream.of(entities);
The second one does not do what you think it does! It does not give you a stream with the elements of the collection; instead, it will give you a stream with a single element, which is the collection itself (not its elements).
If you need to have a stream containing the elements of the collection, then you must use entities.stream()
.
1)
Stream<String> stream1 = entities.stream()
2)
Stream<Collection<String>> stream2 = Stream.of(entities)
So use 1, or for 2
Stream<String> stream3 = Stream.of("String1", "String2")
I myself keep getting confused about this so I might as well leave this here for future reference:
import java.util.stream.IntStream;
import java.util.stream.Stream;
import static java.util.Arrays.*;
import static java.util.stream.Stream.*;
class Foo {
void foo() {
Stream<Foo> foo;
foo = of(new Foo(), new Foo());
// foo = stream(new Foo(), new Foo()); not possible
foo = of(new Foo[]{new Foo(), new Foo()});
foo = stream(new Foo[]{new Foo(), new Foo()});
Stream<Integer> integerStream;
integerStream = of(1, 2);
// integerStream = stream(1, 2); not possible
integerStream = of(new Integer[]{1, 2});
integerStream = stream(new Integer[]{1, 2});
Stream<int[]> intArrayStream = of(new int[]{1, 2}); // count = 1!
IntStream intStream = stream(new int[]{1, 2}); // count = 2!
}
}