Skip to main content Link Menu Expand (external link) Document Search Copy Copied

Creating Streams

Header Image

Ahoy matey! As a buccaneer on the high seas of Java, you know that collecting treasure is a never-ending quest. But, just like the fabled Blackbeard, you don’t have to do all the work yourself. With Java Streams, you can create pipelines that flow through your data collections and arrays, doing the heavy lifting for you.

Streams from Collections and Arrays

Creating a stream from a collection or array is easy as pie (or should we say, easy as sea biscuit). All you have to do is call the stream() method on the collection or array.

List<String> loot = new ArrayList<>();
loot.add("gold coin");
loot.add("ruby");
loot.add("emerald");
loot.add("sapphire");

Stream<String> streamOfLoot = loot.stream();

In this example, we have a list of String objects representing our treasure, and we call the stream() method on it to create a Stream<String>. Now we can start using the power of Java Streams to filter, map, reduce, and collect our treasure with ease.

But what about arrays, you ask? It’s just as simple. You can create a stream from an array using the static Arrays.stream() method.

int[] doubloons = {10, 20, 50, 100};

IntStream streamOfDoubloons = Arrays.stream(doubloons);

Here we have an array of int representing our doubloons. We call the Arrays.stream() method on it to create an IntStream.

Conclusion

Creating streams from collections and arrays is a fundamental step towards processing your Java data with Java Streams. It’s simple, efficient, and saves you time and effort. But, as any seasoned pirate knows, there are always more treasures to be found. Stay tuned for our next adventure as we explore creating streams from files and I/O channels. Keep hoisting the Jolly Roger, and happy coding!

Streams from Files and I/O Channels

As a pirate, you’re no stranger to navigating the treacherous waters of I/O channels and files. And with Java Streams, you can make your voyage smoother and more efficient by creating streams from them.

Creating a stream from a file is easy as pie (or should we say, easy as a bottle of rum). All you have to do is call the Files.lines() method on the path to the file.

Path pathToTreasureMap = Paths.get("treasure_map.txt");

try (Stream<String> streamOfMap = Files.lines(pathToTreasureMap)) {
    // process the streamOfMap here
} catch (IOException e) {
    // handle exception here
}

In this example, we have a file called treasure_map.txt, and we create a Path object to represent it. Then we call the Files.lines() method on the Path object to create a Stream<String>. We wrap it in a try-with-resources block to ensure it’s properly closed when we’re done processing it.

But what about I/O channels, you ask? It’s just as simple. You can create a stream from an InputStream or Reader object using the BufferedReader.lines() method.

try (InputStream streamOfCrew = new FileInputStream("crew.txt");
     BufferedReader readerOfCrew = new BufferedReader(new InputStreamReader(streamOfCrew))) {
    Stream<String> streamOfNames = readerOfCrew.lines();
    // process the streamOfNames here
} catch (IOException e) {
    // handle exception here
}

Here we have an InputStream object representing our crew.txt file, and we create a BufferedReader object to read from it. Then we call the BufferedReader.lines() method to create a Stream<String>. We wrap it in a try-with-resources block to ensure it’s properly closed when we’re done processing it.

Conclusion

Creating streams from files and I/O channels opens up a whole new world of possibilities for processing your Java data with Java Streams. It’s easy, efficient, and saves you time and effort. But, as any seasoned pirate knows, there are always more treasures to be found. Keep exploring the vast seas of Java Streams, and happy coding!