stream creation in Java

* Create a stream from Collection
```
import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;
 
class Main{
    public static void main(String[] args){
        List<String> collection = Arrays.asList("Java", "C++");
        
        Stream<String> stream = collection.stream();
        System.out.println(Arrays.toString(stream.toArray(String[]::new)));
 
        Stream<String> parallel_stream = collection.parallelStream();
        System.out.println(Arrays.toString(parallel_stream.toArray()));
    }
}
```
* Create a stream from specified values
```
import java.util.Arrays;
import java.util.stream.Stream;
 
class Main {
    public static void main(String[] args) {
        Stream<String> stream = Stream.of("1", "4");
        System.out.println(Arrays.toString(stream.toArray()));
    }
}
```
* Create stream from an array
```
import java.util.Arrays;
import java.util.stream.Stream;
 
class Main {
    public static void main(String[] args) {
        String[] arr = { "Java", "C++" };
 
        Stream<String> stream = Arrays.stream(arr);
        System.out.println(Arrays.toString(stream.toArray()));
 
        int start = 0;  // inclusive
        int end = 2;    // exclusive
        stream = Arrays.stream(arr, start, end);
        System.out.println(Arrays.toString(stream.toArray()));
        
        stream = Stream.of(arr);
        System.out.println(Arrays.toString(stream.toArray(String[]::new)));
    }
}
```
*  Create an empty stream
```
import java.util.Arrays;
import java.util.stream.Stream;
 
class Main {
    public static void main(String[] args) {
        Stream<String> emptyStream = Stream.empty();
        System.out.println(Arrays.toString(emptyStream.toArray()));
    }
}
```
* Create a stream from Builder
```
import java.util.Arrays;
import java.util.stream.Stream;
 
class Main {
    public static void main(String[] args) {
        Stream<String> streamBuilder = Stream.<String>builder()
                                            .add("Stream")
                                            .add("API")
                                            .build();
 
        System.out.println(Arrays.toString(streamBuilder.toArray()));
    }
}
```
* Create an infinite stream using Stream.iterate() method
```
import java.util.Arrays;
import java.util.stream.Stream;
 
class Main {
    public static void main(String[] args) {
        Stream<Integer> IntegerStream = Stream.iterate(0, n -> n + 1).limit(10);
        Stream<Double> DoubleStream = Stream.iterate(0.0, n -> n + 1.0).limit(5);
 
        System.out.println(Arrays.toString(IntegerStream.toArray()));
        System.out.println(Arrays.toString(DoubleStream.toArray()));
    }
}
```
*  Create an infinite stream using Stream.generate() method
```
import java.util.Arrays;
import java.util.Random;
import java.util.stream.Stream;
 
class Main {
    public static void main(String[] args) {
        Stream<Double> randomDoubleStream = Stream.generate(Math::random).limit(4);
        System.out.println(Arrays.toString(randomDoubleStream.toArray()));
    }
}
```
* Create a stream from a sequence that matches a pattern
```
import java.util.Arrays;
import java.util.regex.Pattern;
import java.util.stream.Stream;
 
class Main {
    public static void main(String[] args) {
        String input = "Java C++";
        Stream<String> stream = Pattern.compile("\\s").splitAsStream(input);
        System.out.println(Arrays.toString(stream.toArray()));
    }
}
```
```