Java 8 Stream Factory Methods - Vanderbilt Universityschmidt/cs891f/2018-PDFs/12-Java... ·...
Transcript of Java 8 Stream Factory Methods - Vanderbilt Universityschmidt/cs891f/2018-PDFs/12-Java... ·...
![Page 1: Java 8 Stream Factory Methods - Vanderbilt Universityschmidt/cs891f/2018-PDFs/12-Java... · 2018-10-01 · Stream stream = Arrays.stream(a); stream.forEach(s -> System.out.println(s));](https://reader033.fdocuments.net/reader033/viewer/2022043008/5f97f7e34e18dd5bf525d223/html5/thumbnails/1.jpg)
Java 8 Stream Factory Methods
Douglas C. [email protected]
www.dre.vanderbilt.edu/~schmidt
Professor of Computer Science
Institute for Software
Integrated Systems
Vanderbilt University
Nashville, Tennessee, USA
![Page 2: Java 8 Stream Factory Methods - Vanderbilt Universityschmidt/cs891f/2018-PDFs/12-Java... · 2018-10-01 · Stream stream = Arrays.stream(a); stream.forEach(s -> System.out.println(s));](https://reader033.fdocuments.net/reader033/viewer/2022043008/5f97f7e34e18dd5bf525d223/html5/thumbnails/2.jpg)
2
Learning Objectives in this Lesson• Recognize common stream factory methods
![Page 3: Java 8 Stream Factory Methods - Vanderbilt Universityschmidt/cs891f/2018-PDFs/12-Java... · 2018-10-01 · Stream stream = Arrays.stream(a); stream.forEach(s -> System.out.println(s));](https://reader033.fdocuments.net/reader033/viewer/2022043008/5f97f7e34e18dd5bf525d223/html5/thumbnails/3.jpg)
3
Common Factory Methods for Creating Streams
![Page 4: Java 8 Stream Factory Methods - Vanderbilt Universityschmidt/cs891f/2018-PDFs/12-Java... · 2018-10-01 · Stream stream = Arrays.stream(a); stream.forEach(s -> System.out.println(s));](https://reader033.fdocuments.net/reader033/viewer/2022043008/5f97f7e34e18dd5bf525d223/html5/thumbnails/4.jpg)
4See docs.oracle.com/javase/8/docs/api/java/util/stream/package-summary.html
Common Factory Methods for Creating Streams• Streams can be obtained various ways
![Page 5: Java 8 Stream Factory Methods - Vanderbilt Universityschmidt/cs891f/2018-PDFs/12-Java... · 2018-10-01 · Stream stream = Arrays.stream(a); stream.forEach(s -> System.out.println(s));](https://reader033.fdocuments.net/reader033/viewer/2022043008/5f97f7e34e18dd5bf525d223/html5/thumbnails/5.jpg)
5
• Streams can be obtained various ways, e.g.,
• From a Java collection
or
Common Factory Methods for Creating Streams
List<String> wordsToFind =
Arrays.asList("do", "re", "me", ...);
List<SearchResults> results =
wordsToFind.stream()
...
List<SearchResults> results =
wordsToFind.parallelStream()
...
![Page 6: Java 8 Stream Factory Methods - Vanderbilt Universityschmidt/cs891f/2018-PDFs/12-Java... · 2018-10-01 · Stream stream = Arrays.stream(a); stream.forEach(s -> System.out.println(s));](https://reader033.fdocuments.net/reader033/viewer/2022043008/5f97f7e34e18dd5bf525d223/html5/thumbnails/6.jpg)
6
• Streams can be obtained various ways, e.g.,
• From a Java collection
See docs.oracle.com/javase/tutorial/collections/streams
Common Factory Methods for Creating Streams
List<String> wordsToFind =
Arrays.asList("do", "re", "me", ...);
List<SearchResults> results =
wordsToFind.stream()
...
![Page 7: Java 8 Stream Factory Methods - Vanderbilt Universityschmidt/cs891f/2018-PDFs/12-Java... · 2018-10-01 · Stream stream = Arrays.stream(a); stream.forEach(s -> System.out.println(s));](https://reader033.fdocuments.net/reader033/viewer/2022043008/5f97f7e34e18dd5bf525d223/html5/thumbnails/7.jpg)
7
• Streams can be obtained various ways, e.g.,
• From a Java collection
See docs.oracle.com/javase/tutorial/collections/streams/parallelism.html
Common Factory Methods for Creating Streams
or
List<String> wordsToFind =
Arrays.asList("do", "re", "me", ...);
List<SearchResults> results =
wordsToFind.stream()
...
List<SearchResults> results =
wordsToFind.parallelStream()
...
![Page 8: Java 8 Stream Factory Methods - Vanderbilt Universityschmidt/cs891f/2018-PDFs/12-Java... · 2018-10-01 · Stream stream = Arrays.stream(a); stream.forEach(s -> System.out.println(s));](https://reader033.fdocuments.net/reader033/viewer/2022043008/5f97f7e34e18dd5bf525d223/html5/thumbnails/8.jpg)
8
• Streams can be obtained various ways, e.g.,
• From a Java collection
See docs.oracle.com/javase/8/docs/api/java/util/stream/BaseStream.html#parallel
Common Factory Methods for Creating Streams
A call to parallel() can appear anywhere in a
stream & will have same effect as parallelStream()
or
List<String> wordsToFind =
Arrays.asList("do", "re", "me", ...);
List<SearchResults> results =
wordsToFind.stream()
...
List<SearchResults> results =
wordsToFind.stream()
...
.parallel()
![Page 9: Java 8 Stream Factory Methods - Vanderbilt Universityschmidt/cs891f/2018-PDFs/12-Java... · 2018-10-01 · Stream stream = Arrays.stream(a); stream.forEach(s -> System.out.println(s));](https://reader033.fdocuments.net/reader033/viewer/2022043008/5f97f7e34e18dd5bf525d223/html5/thumbnails/9.jpg)
9
• Streams can be obtained various ways, e.g.,
• From a Java collection
• From an arrayString[] a = {
"a", "b", "c", "d", "e"
};
Stream<String> stream = Arrays.stream(a);
stream.forEach(s ->
System.out.println(s));
or
stream.forEach(System.out::println);
Common Factory Methods for Creating Streams
![Page 10: Java 8 Stream Factory Methods - Vanderbilt Universityschmidt/cs891f/2018-PDFs/12-Java... · 2018-10-01 · Stream stream = Arrays.stream(a); stream.forEach(s -> System.out.println(s));](https://reader033.fdocuments.net/reader033/viewer/2022043008/5f97f7e34e18dd5bf525d223/html5/thumbnails/10.jpg)
10
String[] a = {
"a", "b", "c", "d", "e"
};
Stream<String> stream = Arrays.stream(a);
stream.forEach(s ->
System.out.println(s));
or
stream.forEach(System.out::println);
• Streams can be obtained various ways, e.g.,
• From a Java collection
• From an array
Get & print all the elements in an array
Common Factory Methods for Creating Streams
See docs.oracle.com/javase/8/docs/api/java/util/Arrays.html#stream
![Page 11: Java 8 Stream Factory Methods - Vanderbilt Universityschmidt/cs891f/2018-PDFs/12-Java... · 2018-10-01 · Stream stream = Arrays.stream(a); stream.forEach(s -> System.out.println(s));](https://reader033.fdocuments.net/reader033/viewer/2022043008/5f97f7e34e18dd5bf525d223/html5/thumbnails/11.jpg)
11
String[] a = {
"a", "b", "c", "d", "e"
};
Stream<String> stream = Arrays.stream(a);
stream.forEach(s ->
System.out.println(s));
or
stream.forEach(System.out::println);
• Streams can be obtained various ways, e.g.,
• From a Java collection
• From an array
Get & print all the elements in an array
Common Factory Methods for Creating Streams
![Page 12: Java 8 Stream Factory Methods - Vanderbilt Universityschmidt/cs891f/2018-PDFs/12-Java... · 2018-10-01 · Stream stream = Arrays.stream(a); stream.forEach(s -> System.out.println(s));](https://reader033.fdocuments.net/reader033/viewer/2022043008/5f97f7e34e18dd5bf525d223/html5/thumbnails/12.jpg)
12
• Streams can be obtained various ways, e.g.,
• From a Java collection
• From an array
• From a static factory method
String[] a = {
"a", "b", "c", "d", "e"
};
Stream<String> stream = Stream.of(a);
stream.forEach(s ->
System.out.println(s));
or
stream.forEach(System.out::println);
Common Factory Methods for Creating Streams
![Page 13: Java 8 Stream Factory Methods - Vanderbilt Universityschmidt/cs891f/2018-PDFs/12-Java... · 2018-10-01 · Stream stream = Arrays.stream(a); stream.forEach(s -> System.out.println(s));](https://reader033.fdocuments.net/reader033/viewer/2022043008/5f97f7e34e18dd5bf525d223/html5/thumbnails/13.jpg)
13
• Streams can be obtained various ways, e.g.,
• From a Java collection
• From an array
• From a static factory method
String[] a = {
"a", "b", "c", "d", "e"
};
Stream<String> stream = Stream.of(a);
stream.forEach(s ->
System.out.println(s));
or
stream.forEach(System.out::println);
Common Factory Methods for Creating Streams
Get & print all the elements in an array
See docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html#of
![Page 14: Java 8 Stream Factory Methods - Vanderbilt Universityschmidt/cs891f/2018-PDFs/12-Java... · 2018-10-01 · Stream stream = Arrays.stream(a); stream.forEach(s -> System.out.println(s));](https://reader033.fdocuments.net/reader033/viewer/2022043008/5f97f7e34e18dd5bf525d223/html5/thumbnails/14.jpg)
14
• Streams can be obtained various ways, e.g.,
• From a Java collection
• From an array
• From a static factory method
String[] a = {
"a", "b", "c", "d", "e"
};
Stream<String> stream = Stream.of(a);
stream.forEach(s ->
System.out.println(s));
or
stream.forEach(System.out::println);
Common Factory Methods for Creating Streams
Get & print all the elements in an array
![Page 15: Java 8 Stream Factory Methods - Vanderbilt Universityschmidt/cs891f/2018-PDFs/12-Java... · 2018-10-01 · Stream stream = Arrays.stream(a); stream.forEach(s -> System.out.println(s));](https://reader033.fdocuments.net/reader033/viewer/2022043008/5f97f7e34e18dd5bf525d223/html5/thumbnails/15.jpg)
15
• Streams can be obtained various ways, e.g.,
• From a Java collection
• From an array
• From a static factory method
Stream.iterate(new BigInteger[]{BigInteger.ONE,
BigInteger.ONE},
f -> new BigInteger[]{f[1],
f[0].add(f[1])})
.map(f -> f[0])
.limit(100)
.forEach(System.out::println);
Common Factory Methods for Creating Streams
See docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html#iterate
![Page 16: Java 8 Stream Factory Methods - Vanderbilt Universityschmidt/cs891f/2018-PDFs/12-Java... · 2018-10-01 · Stream stream = Arrays.stream(a); stream.forEach(s -> System.out.println(s));](https://reader033.fdocuments.net/reader033/viewer/2022043008/5f97f7e34e18dd5bf525d223/html5/thumbnails/16.jpg)
16
• Streams can be obtained various ways, e.g.,
• From a Java collection
• From an array
• From a static factory method
Stream.iterate(new BigInteger[]{BigInteger.ONE,
BigInteger.ONE},
f -> new BigInteger[]{f[1],
f[0].add(f[1])})
.map(f -> f[0])
.limit(100)
.forEach(System.out::println);
Generate & print the first 100 Fibonacci #’s
Common Factory Methods for Creating Streams
![Page 17: Java 8 Stream Factory Methods - Vanderbilt Universityschmidt/cs891f/2018-PDFs/12-Java... · 2018-10-01 · Stream stream = Arrays.stream(a); stream.forEach(s -> System.out.println(s));](https://reader033.fdocuments.net/reader033/viewer/2022043008/5f97f7e34e18dd5bf525d223/html5/thumbnails/17.jpg)
17
• Streams can be obtained various ways, e.g.,
• From a Java collection
• From an array
• From a static factory method
Stream.iterate(new BigInteger[]{BigInteger.ONE,
BigInteger.ONE},
f -> new BigInteger[]{f[1],
f[0].add(f[1])})
.map(f -> f[0])
.limit(100)
.forEach(System.out::println);
Create the “seed,” which defines the initial element in the stream
Common Factory Methods for Creating Streams
![Page 18: Java 8 Stream Factory Methods - Vanderbilt Universityschmidt/cs891f/2018-PDFs/12-Java... · 2018-10-01 · Stream stream = Arrays.stream(a); stream.forEach(s -> System.out.println(s));](https://reader033.fdocuments.net/reader033/viewer/2022043008/5f97f7e34e18dd5bf525d223/html5/thumbnails/18.jpg)
18
• Streams can be obtained various ways, e.g.,
• From a Java collection
• From an array
• From a static factory method
Stream.iterate(new BigInteger[]{BigInteger.ONE,
BigInteger.ONE},
f -> new BigInteger[]{f[1],
f[0].add(f[1])})
.map(f -> f[0])
.limit(100)
.forEach(System.out::println);
A lambda function applied to the previous element to
produce a new element
Common Factory Methods for Creating Streams
![Page 19: Java 8 Stream Factory Methods - Vanderbilt Universityschmidt/cs891f/2018-PDFs/12-Java... · 2018-10-01 · Stream stream = Arrays.stream(a); stream.forEach(s -> System.out.println(s));](https://reader033.fdocuments.net/reader033/viewer/2022043008/5f97f7e34e18dd5bf525d223/html5/thumbnails/19.jpg)
19
• Streams can be obtained various ways, e.g.,
• From a Java collection
• From an array
• From a static factory method
Stream.iterate(new BigInteger[]{BigInteger.ONE,
BigInteger.ONE},
f -> new BigInteger[]{f[1],
f[0].add(f[1])})
.map(f -> f[0])
.limit(100)
.forEach(System.out::println);
Convert the array to its first element
Common Factory Methods for Creating Streams
![Page 20: Java 8 Stream Factory Methods - Vanderbilt Universityschmidt/cs891f/2018-PDFs/12-Java... · 2018-10-01 · Stream stream = Arrays.stream(a); stream.forEach(s -> System.out.println(s));](https://reader033.fdocuments.net/reader033/viewer/2022043008/5f97f7e34e18dd5bf525d223/html5/thumbnails/20.jpg)
20
• Streams can be obtained various ways, e.g.,
• From a Java collection
• From an array
• From a static factory method
Stream.iterate(new BigInteger[]{BigInteger.ONE,
BigInteger.ONE},
f -> new BigInteger[]{f[1],
f[0].add(f[1])})
.map(f -> f[0])
.limit(100)
.forEach(System.out::println);
Common Factory Methods for Creating Streams
See docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html#limit
Limit the stream to 100 elements
![Page 21: Java 8 Stream Factory Methods - Vanderbilt Universityschmidt/cs891f/2018-PDFs/12-Java... · 2018-10-01 · Stream stream = Arrays.stream(a); stream.forEach(s -> System.out.println(s));](https://reader033.fdocuments.net/reader033/viewer/2022043008/5f97f7e34e18dd5bf525d223/html5/thumbnails/21.jpg)
21
• Streams can be obtained various ways, e.g.,
• From a Java collection
• From an array
• From a static factory method
Stream.iterate(new BigInteger[]{BigInteger.ONE,
BigInteger.ONE},
f -> new BigInteger[]{f[1],
f[0].add(f[1])})
.map(f -> f[0])
.limit(100)
.forEach(System.out::println); Print the Fibonacci #’s
Common Factory Methods for Creating Streams
![Page 22: Java 8 Stream Factory Methods - Vanderbilt Universityschmidt/cs891f/2018-PDFs/12-Java... · 2018-10-01 · Stream stream = Arrays.stream(a); stream.forEach(s -> System.out.println(s));](https://reader033.fdocuments.net/reader033/viewer/2022043008/5f97f7e34e18dd5bf525d223/html5/thumbnails/22.jpg)
22
• Streams can be obtained various ways, e.g.,
• From a Java collection
• From an array
• From a static factory method
Stream.iterate(new BigInteger[]{BigInteger.ONE,
BigInteger.ONE},
f -> new BigInteger[]{f[1],
f[0].add(f[1])})
.parallel()
.map(f -> f[0])
.limit(100)
.forEach(System.out::println);
Common Factory Methods for Creating Streams
See docs.oracle.com/javase/8/docs/api/java/util/stream/IntStream.html#range
Don’t use iterate() in a parallel stream! Use the *Stream.range() method instead..
![Page 23: Java 8 Stream Factory Methods - Vanderbilt Universityschmidt/cs891f/2018-PDFs/12-Java... · 2018-10-01 · Stream stream = Arrays.stream(a); stream.forEach(s -> System.out.println(s));](https://reader033.fdocuments.net/reader033/viewer/2022043008/5f97f7e34e18dd5bf525d223/html5/thumbnails/23.jpg)
23
• Streams can be obtained various ways, e.g.,
• From a Java collection
• From an array
• From a static factory method
• BufferedReader.lines() obtains lines of a file
void printFileLines
(String filename){
try (BufferedReader reader =
Files.newBufferedReader
(Paths.get(filename)) {
reader
.lines()
.forEach
(System.out::println);
} catch (IOException ex) {...}
}Create a stream containing
all of the lines in a file
Common Factory Methods for Creating Streams
See docs.oracle.com/javase/8/docs/api/java/io/BufferedReader.html#lines
![Page 24: Java 8 Stream Factory Methods - Vanderbilt Universityschmidt/cs891f/2018-PDFs/12-Java... · 2018-10-01 · Stream stream = Arrays.stream(a); stream.forEach(s -> System.out.println(s));](https://reader033.fdocuments.net/reader033/viewer/2022043008/5f97f7e34e18dd5bf525d223/html5/thumbnails/24.jpg)
24
• Streams can be obtained various ways, e.g.,
• From a Java collection
• From an array
• From a static factory method
• BufferedReader.lines() obtains lines of a file
void printFileLines
(String filename){
try (BufferedReader reader =
Files.newBufferedReader
(Paths.get(filename)) {
reader
.lines()
.forEach
(System.out::println);
} catch (IOException ex) {...}
}Print each of the lines in the stream
Common Factory Methods for Creating Streams
![Page 25: Java 8 Stream Factory Methods - Vanderbilt Universityschmidt/cs891f/2018-PDFs/12-Java... · 2018-10-01 · Stream stream = Arrays.stream(a); stream.forEach(s -> System.out.println(s));](https://reader033.fdocuments.net/reader033/viewer/2022043008/5f97f7e34e18dd5bf525d223/html5/thumbnails/25.jpg)
25
• Streams can be obtained various ways, e.g.,
• From a Java collection
• From an array
• From a static factory method
• BufferedReader.lines() obtains lines of a file
• Streams of file paths & lines can be obtained from Files methods
void printFileLines
(String filename){
try(Stream<String> stream =
Files.lines
(Paths.get(fileName))) {
stream.forEach
(System.out::println);
} catch (IOException ex) {...}
}
Common Factory Methods for Creating Streams
See docs.oracle.com/javase/8/docs/api/java/nio/file/Files.html#lines
Create a stream containing all of the lines in a file
![Page 26: Java 8 Stream Factory Methods - Vanderbilt Universityschmidt/cs891f/2018-PDFs/12-Java... · 2018-10-01 · Stream stream = Arrays.stream(a); stream.forEach(s -> System.out.println(s));](https://reader033.fdocuments.net/reader033/viewer/2022043008/5f97f7e34e18dd5bf525d223/html5/thumbnails/26.jpg)
26
• Streams can be obtained various ways, e.g.,
• From a Java collection
• From an array
• From a static factory method
• BufferedReader.lines() obtains lines of a file
• Streams of file paths & lines can be obtained from Files methods
void printFileLines
(String filename){
try(Stream<String> stream =
Files.lines
(Paths.get(fileName))) {
stream.forEach
(System.out::println);
} catch (IOException ex) {...}
}
Common Factory Methods for Creating Streams
Print each of the lines in the stream
![Page 27: Java 8 Stream Factory Methods - Vanderbilt Universityschmidt/cs891f/2018-PDFs/12-Java... · 2018-10-01 · Stream stream = Arrays.stream(a); stream.forEach(s -> System.out.println(s));](https://reader033.fdocuments.net/reader033/viewer/2022043008/5f97f7e34e18dd5bf525d223/html5/thumbnails/27.jpg)
27
• Streams can be obtained various ways, e.g.,
• From a Java collection
• From an array
• From a static factory method
• BufferedReader.lines() obtains lines of a file
• Streams of file paths & lines can be obtained from Files methods
• A stream of random #’s can be obtained from Random.ints()
new Random()
.ints(0,100)
.limit(50)
.forEach(System.out::println);
Common Factory Methods for Creating Streams
![Page 28: Java 8 Stream Factory Methods - Vanderbilt Universityschmidt/cs891f/2018-PDFs/12-Java... · 2018-10-01 · Stream stream = Arrays.stream(a); stream.forEach(s -> System.out.println(s));](https://reader033.fdocuments.net/reader033/viewer/2022043008/5f97f7e34e18dd5bf525d223/html5/thumbnails/28.jpg)
28
• Streams can be obtained various ways, e.g.,
• From a Java collection
• From an array
• From a static factory method
• BufferedReader.lines() obtains lines of a file
• Streams of file paths & lines can be obtained from Files methods
• A stream of random #’s can be obtained from Random.ints()
new Random()
.ints(0,100)
.limit(50)
.forEach(System.out::println);
Generate an “unbounded” stream of random #’s ranging between 0 & 100
Common Factory Methods for Creating Streams
See docs.oracle.com/javase/8/docs/api/java/util/Random.html#ints
![Page 29: Java 8 Stream Factory Methods - Vanderbilt Universityschmidt/cs891f/2018-PDFs/12-Java... · 2018-10-01 · Stream stream = Arrays.stream(a); stream.forEach(s -> System.out.println(s));](https://reader033.fdocuments.net/reader033/viewer/2022043008/5f97f7e34e18dd5bf525d223/html5/thumbnails/29.jpg)
29
• Streams can be obtained various ways, e.g.,
• From a Java collection
• From an array
• From a static factory method
• BufferedReader.lines() obtains lines of a file
• Streams of file paths & lines can be obtained from Files methods
• A stream of random #’s can be obtained from Random.ints()
new Random()
.ints(0,100)
.limit(50)
.forEach(System.out::println);
Common Factory Methods for Creating Streams
Limit the size of the stream to 50 elements
![Page 30: Java 8 Stream Factory Methods - Vanderbilt Universityschmidt/cs891f/2018-PDFs/12-Java... · 2018-10-01 · Stream stream = Arrays.stream(a); stream.forEach(s -> System.out.println(s));](https://reader033.fdocuments.net/reader033/viewer/2022043008/5f97f7e34e18dd5bf525d223/html5/thumbnails/30.jpg)
30
• Streams can be obtained various ways, e.g.,
• From a Java collection
• From an array
• From a static factory method
• BufferedReader.lines() obtains lines of a file
• Streams of file paths & lines can be obtained from Files methods
• A stream of random #’s can be obtained from Random.ints()
new Random()
.ints(0,100)
.limit(50)
.forEach(System.out::println);
Common Factory Methods for Creating Streams
Print each random # in the stream
![Page 31: Java 8 Stream Factory Methods - Vanderbilt Universityschmidt/cs891f/2018-PDFs/12-Java... · 2018-10-01 · Stream stream = Arrays.stream(a); stream.forEach(s -> System.out.println(s));](https://reader033.fdocuments.net/reader033/viewer/2022043008/5f97f7e34e18dd5bf525d223/html5/thumbnails/31.jpg)
31
• Streams can be obtained various ways, e.g.,
• From a Java collection
• From an array
• From a static factory method
• BufferedReader.lines() obtains lines of a file
• Streams of file paths & lines can be obtained from Files methods
• A stream of random #’s can be obtained from Random.ints()
• Other JDK stream-bearing methods
Stream<String> getInputData
(String filename,
String splitter){
return Pattern
.compile(splitter)
.splitAsStream
(new String
(Files.readAllBytes
(Paths.get(filename)
.toURI())));
}
Common Factory Methods for Creating Streams
![Page 32: Java 8 Stream Factory Methods - Vanderbilt Universityschmidt/cs891f/2018-PDFs/12-Java... · 2018-10-01 · Stream stream = Arrays.stream(a); stream.forEach(s -> System.out.println(s));](https://reader033.fdocuments.net/reader033/viewer/2022043008/5f97f7e34e18dd5bf525d223/html5/thumbnails/32.jpg)
32
• Streams can be obtained various ways, e.g.,
• From a Java collection
• From an array
• From a static factory method
• BufferedReader.lines() obtains lines of a file
• Streams of file paths & lines can be obtained from Files methods
• A stream of random #’s can be obtained from Random.ints()
• Other JDK stream-bearing methods
Stream<String> getInputData
(String filename,
String splitter){
return Pattern
.compile(splitter)
.splitAsStream
(new String
(Files.readAllBytes
(Paths.get(filename)
.toURI())));
}
Splits a file into a stream of strings
Common Factory Methods for Creating Streams
See docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html#splitAsStream
![Page 33: Java 8 Stream Factory Methods - Vanderbilt Universityschmidt/cs891f/2018-PDFs/12-Java... · 2018-10-01 · Stream stream = Arrays.stream(a); stream.forEach(s -> System.out.println(s));](https://reader033.fdocuments.net/reader033/viewer/2022043008/5f97f7e34e18dd5bf525d223/html5/thumbnails/33.jpg)
33
• Streams can be obtained various ways, e.g.,
• From a Java collection
• From an array
• From a static factory method
• BufferedReader.lines() obtains lines of a file
• Streams of file paths & lines can be obtained from Files methods
• A stream of random #’s can be obtained from Random.ints()
• Other JDK stream-bearing methods
List<TreeMap<Long, String>>
listOfTreeMaps =
Stream.generate
(TreeMap<Long, String>::new)
.limit(100)
.collect(toList());
Generate an “infinite” stream of TreeMaps
Common Factory Methods for Creating Streams
See docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html#generate
![Page 34: Java 8 Stream Factory Methods - Vanderbilt Universityschmidt/cs891f/2018-PDFs/12-Java... · 2018-10-01 · Stream stream = Arrays.stream(a); stream.forEach(s -> System.out.println(s));](https://reader033.fdocuments.net/reader033/viewer/2022043008/5f97f7e34e18dd5bf525d223/html5/thumbnails/34.jpg)
34
• Streams can be obtained various ways, e.g.,
• From a Java collection
• From an array
• From a static factory method
• BufferedReader.lines() obtains lines of a file
• Streams of file paths & lines can be obtained from Files methods
• A stream of random #’s can be obtained from Random.ints()
• Other JDK stream-bearing methods
List<TreeMap<Long, String>>
listOfTreeMaps =
Stream.generate
(TreeMap<Long, String>::new)
.limit(100)
.collect(toList());
Common Factory Methods for Creating Streams
Limit the stream to 100 elements
![Page 35: Java 8 Stream Factory Methods - Vanderbilt Universityschmidt/cs891f/2018-PDFs/12-Java... · 2018-10-01 · Stream stream = Arrays.stream(a); stream.forEach(s -> System.out.println(s));](https://reader033.fdocuments.net/reader033/viewer/2022043008/5f97f7e34e18dd5bf525d223/html5/thumbnails/35.jpg)
35
• Streams can be obtained various ways, e.g.,
• From a Java collection
• From an array
• From a static factory method
• BufferedReader.lines() obtains lines of a file
• Streams of file paths & lines can be obtained from Files methods
• A stream of random #’s can be obtained from Random.ints()
• Other JDK stream-bearing methods
List<TreeMap<Long, String>>
listOfTreeMaps =
Stream.generate
(TreeMap<Long, String>::new)
.limit(100)
.collect(toList());
Common Factory Methods for Creating Streams
Create a list of 100 TreeMaps
![Page 36: Java 8 Stream Factory Methods - Vanderbilt Universityschmidt/cs891f/2018-PDFs/12-Java... · 2018-10-01 · Stream stream = Arrays.stream(a); stream.forEach(s -> System.out.println(s));](https://reader033.fdocuments.net/reader033/viewer/2022043008/5f97f7e34e18dd5bf525d223/html5/thumbnails/36.jpg)
36
• Streams can be obtained various ways, e.g.,
• From a Java collection
• From an array
• From a static factory method
• BufferedReader.lines() obtains lines of a file
• Streams of file paths & lines can be obtained from Files methods
• A stream of random #’s can be obtained from Random.ints()
• Other JDK stream-bearing methods
List<TreeMap<Long, String>>
listOfTreeMaps =
Stream.generate
(TreeMap<Long, String>::new)
.limit(100)
.collect(toList());
Common Factory Methods for Creating Streams
We’ll use this idiom in Java 8 programs covered later
![Page 37: Java 8 Stream Factory Methods - Vanderbilt Universityschmidt/cs891f/2018-PDFs/12-Java... · 2018-10-01 · Stream stream = Arrays.stream(a); stream.forEach(s -> System.out.println(s));](https://reader033.fdocuments.net/reader033/viewer/2022043008/5f97f7e34e18dd5bf525d223/html5/thumbnails/37.jpg)
37
End of Java 8 Stream Factory Methods