package com.github.jhusain.learnrxjava.types; import java.util.function.BiFunction; import java.util.function.Consumer; import java.util.function.Function; import java.util.function.Predicate; /** * 组合的List, 提供map,filter,reduce等操作 * @param <T> */ public interface ComposableList<T> extends Iterable<T> { // 映射 public <R> ComposableList<R> map(Function<T, R> projectionFunction); // 过滤 public ComposableList<T> filter(Predicate<T> predicateFunction); // 连接 public <R> ComposableList<R> concatMap(Function<T, ComposableList<R>> projectionFunctionThatReturnsList); // 缩小 public ComposableList<T> reduce(BiFunction<T, T, T> combiner); public <R> ComposableList<R> reduce(R initialValue, BiFunction<R, T, R> combiner); public int size(); public void forEach(Consumer<? super T> action); public T get(int index); }