官术网_书友最值得收藏!

AOL Cyclops React

As we already learned, Java Streams API is a very powerful way of dealing with data in a functional way. The Cyclops React library extends this API by adding new operations on streams and allows for more control of the flow execution. To include the library, add this to the pom.xml file:

<dependency> 
<groupId>com.aol.simplereact</groupId>
<artifactId>cyclops-react</artifactId>
<version>1.0.0-RC4</version>
</dependency>

Some of the methods it adds are zipWithIndex and cast and convenience collectors such as toList, toSet, and toMap. What is more, it gives more control for parallel execution, for example, it is possible to provide a custom executor, which will be used for processing data or intercepting exceptions declaratively.

Also, with this library, it is easy to create a parallel stream from the iterator--it is hard to do it with the standard library.

For example, let's take words.txt, extract all POS tags from it, and then create a map that associates each tag with a unique index. For reading data, we will use LineIterator from Commons IO, which otherwise would be hard to parallelize using only standard Java APIs. Additionally, we create a custom executor, which will be used for executing the stream operations in parallel:

LineIterator it = FileUtils.lineIterator(new File("data/words.txt"), "UTF-8"); 
ExecutorService executor = Executors.newCachedThreadPool();
LazyFutureStream<String> stream =
LazyReact.parallelBuilder().withExecutor(executor).from(it);

Map<String, Integer> map = stream
.map(line -> line.split("t"))
.map(arr -> arr[1].toLowerCase())
.distinct()
.zipWithIndex()
.toMap(Tuple2::v1, t -> t.v2.intValue());

System.out.println(map);
executor.shutdown();
it.close();

It is a very simple example and does not come close to describing all the functionality available in this library. For more information, refer to their documentation, which can be found at https://github.com/aol/cyclops-react. We will also use it in other examples in later chapters. 

主站蜘蛛池模板: 若羌县| 环江| 古田县| 甘南县| 井冈山市| 青铜峡市| 阆中市| 饶平县| 临高县| 邹平县| 乌鲁木齐县| 繁峙县| 荔浦县| 台南县| 崇义县| 绥德县| 开化县| 澄江县| 大石桥市| 凭祥市| 瑞丽市| 肇庆市| 马边| 包头市| 烟台市| 久治县| 西乌珠穆沁旗| 甘孜县| 叶城县| 潞城市| 利津县| 牡丹江市| 普宁市| 潍坊市| 鹤岗市| 沙坪坝区| 昭通市| 从江县| 措勤县| 沙湾县| 平利县|