Skip to content

Instantly share code, notes, and snippets.

@mgandin
Last active August 29, 2015 14:07
Show Gist options
  • Save mgandin/260f15daf54508b44201 to your computer and use it in GitHub Desktop.
Save mgandin/260f15daf54508b44201 to your computer and use it in GitHub Desktop.
Map Reduce RXJava
package fr.mga.mashup.mapreduce;
import rx.Observable;
import java.util.List;
public class MapReduce {
private List<Integer> list;
public MapReduce(List<Integer> list) {
this.list = list;
}
public Integer sum() {
return Observable.from(list).map(new Square()).filter(new WhenSuperiorAtHundredFilter()).take(3).reduce(new Sum())
.toBlocking().first();
}
}
package fr.mga.mashup;
import fr.mga.mashup.mapreduce.MapReduce;
import org.fest.assertions.api.Assertions;
import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
public class MapReduceTest {
@Test
public void should_map_reduce_to_numbers() {
List<Integer> maList = new ArrayList<>();
for (int i = 1; i <= 1000; i++) {
maList.add(i);
}
MapReduce mapReduce = new MapReduce(maList);
Integer sum = mapReduce.sum();
Assertions.assertThat(sum).isEqualTo(434);
}
}
<?xml version="1.0"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>fr.mga.mashup</groupId>
<artifactId>mashup</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<junit.version>4.11</junit.version>
<festassert.version>2.0M10</festassert.version>
<rxjava.version>1.0.0-rc.3</rxjava.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven-compiler-plugin.version>3.1</maven-compiler-plugin.version>
<source.level>1.7</source.level>
<target.level>1.7</target.level>
</properties>
<dependencies>
<dependency>
<groupId>io.reactivex</groupId>
<artifactId>rxjava</artifactId>
<version>${rxjava.version}</version>
</dependency>
<!-- Unit test -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.easytesting</groupId>
<artifactId>fest-assert-core</artifactId>
<version>${festassert.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven-compiler-plugin.version}</version>
<configuration>
<source>${source.level}</source>
<target>${target.level}</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
package fr.mga.mashup.mapreduce;
import rx.functions.Func1;
public class Square implements Func1<Integer,Integer> {
@Override public Integer call(Integer integer) {
return integer * integer;
}
}
package fr.mga.mashup.mapreduce;
import rx.functions.Func2;
public class Sum implements Func2<Integer,Integer,Integer> {
@Override public Integer call(Integer integer, Integer integer2) {
return integer + integer2;
}
}
package fr.mga.mashup.mapreduce;
import rx.functions.Func1;
public class WhenSuperiorAtHundredFilter implements Func1<Integer,Boolean> {
@Override public Boolean call(Integer integer) {
return integer > 100;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment