Skip to content
Mahmoud Ben Hassine edited this page Oct 12, 2015 · 13 revisions

Welcome to XStream!

XStream (uniX Stream) is an extension of the Java 8 Stream API to process data pipelines the Unix way. It provides a set of components that mimic Unix commands (and more).

Features

  • 100% compatible with Java 8 Streams
  • Intuitive, flexible and extensible API
  • A toolbox of reusable components
  • No dependencies
  • Free and open source

How to use it?

You can use XStream in two ways:

1. Either unixifiy your stream and process it the unix way:

Stream<String> stream = Stream.of("foo", "bar", "bar", "baz");

XStream.unixify(stream)
        .grep("a")
        .sort()
        .uniq()
        .nl()
        .to(stdOut());
        
// prints:
// 1 bar
// 2 baz

2. Or write your pipelines as you read them

// cat input.txt | grep a | sort | uniq | nl > output.txt

XStream.cat("input.txt")
        .pipe(grep("a"))
        .pipe(sort())
        .pipe(uniq())
        .pipe(nl())
        .to(file("output.txt"));

Built-in components library

XStream provides a toolbox of reusable components that mimic Unix's commands (and more). Components are inspired by the Unix philosophy and are intended to be:

  • Small
  • Portable
  • Do one thing and do it well
  • Side-effect free

You will find in this wiki a complete reference of all built-in components (see sidebar).

How to write components ?

The Stage interface represents a stage of the pipeline:

public interface Stage<I,O> {

  Stream<O> apply(Stream<I> input);

}

All built-in components are implemented as filters/transformers through this interface. You can implement this interface to create your own components.

Clone this wiki locally