package learnrxjava.examples;
import java.util.Arrays;
import java.util.concurrent.TimeUnit;
import rx.Observable;
public class GroupByExamples {
public static void main(String args[]) {
// odd/even into 2 lists
Observable.range(1, 100)
.groupBy(n -> n % 2 == 0)
.flatMap(g -> {
return g.toList();
}).forEach(System.out::println);
System.out.println("2--------------------------------------------------------------------------------------------------------");
// odd/even into lists of 10
Observable.range(1, 100)
.groupBy(n -> n % 2 == 0)
.flatMap(g -> {
return g.take(10).toList();
}).forEach(System.out::println);
System.out.println("3--------------------------------------------------------------------------------------------------------");
//odd/even into lists of 10
Observable.range(1, 100)
.groupBy(n -> n % 2 == 0)
.flatMap(g -> {
return g.filter(i -> i <= 20).toList();
}).forEach(System.out::println);
System.out.println("4--------------------------------------------------------------------------------------------------------");
//odd/even into lists of 20 but only take the first 2 groups
Observable.range(1, 100)
.groupBy(n -> n % 2 == 0)
.flatMap(g -> {
return g.take(20).toList();
}).take(2).forEach(System.out::println);
System.out.println("5--------------------------------------------------------------------------------------------------------");
//odd/even into 2 lists with numbers less than 30
Observable.range(1, 100)
.groupBy(n -> n % 2 == 0)
.flatMap(g -> {
return g.takeWhile(i -> i < 30).toList();
}).filter(l -> !l.isEmpty()).forEach(System.out::println);
System.out.println("6--------------------------------------------------------------------------------------------------------");
Observable.from(Arrays.asList("a", "b", "c", "a", "b", "c", "a", "b", "c", "a", "b", "c", "a", "b", "c", "a", "b", "c"))
.groupBy(n -> n)
.flatMap(g -> {
return g.take(3).reduce((s, s2) -> s + s2);
}).forEach(System.out::println);
System.out.println("7--------------------------------------------------------------------------------------------------------");
Observable.timer(0, 1, TimeUnit.MILLISECONDS)
.groupBy(n -> n % 2 == 0)
.flatMap(g -> {
return g.take(10).toList();
}).take(2).toBlocking().forEach(System.out::println);
System.out.println("8--------------------------------------------------------------------------------------------------------");
Observable.timer(0, 1, TimeUnit.MILLISECONDS)
.take(20)
.groupBy(n -> n % 2 == 0)
.flatMap(g -> {
return g.toList();
}).toBlocking().forEach(System.out::println);
}
}