Java 8特性(一) 之 手写Stream流filter、map和forEach方法
今天看了一下Java 8的Stream流,学习了一下函数式编程,这才感受函数式编程如此爽,之前就使用过ES8.7.1的函数式编程,当时就在想啥时候咱也能写出这么秀的代码,现在这不就给安排上了。下面的代码是参考了黑马程序的《Java 8流式编程》的教程写的,哈哈哈。
当中的map方法的参数为Function< T, R>
,传入的参数是一个函数,与此同时map方法也被称之为高阶函数
,它的定义为,传输参数为函数对象的方法称之为高阶函数
。 下面就来简单的讲解一下Function< T, R>
,这是一个拥有输入输出的过程,传入的参数类型为T,返回的参数类型为R,在程序中我写的函数式对象为item -> item * item
。
当中的filter方法参数为Predicate<T>
,这个函数式接口的传入的类型为T,返回值为Boolean类型,拥有一个test方法。
当中的forEach方法参数为Consumer,这个函数式接口传入的参数为类型T,返回值类型为void,Consumer函数式接口拥有一个accept方法。
public class SimpleStream<T> {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(5);
SimpleStream.of(list)
.filter(item -> (item & 1) == 0)
.map(item -> item * item)
.forEach(System.out::println);
}
/**
* map方法
*
* @param function
* @return
* @param <R>
*/
public <R> SimpleStream<R> map(Function<T, R> function) {
List<R> result = new ArrayList<>();
for (T t : collection) {
R r = function.apply(t);
result.add(r);
}
return new SimpleStream<R>(result);
}
/**
* 过滤方法
*
* @param predicate
* @return
*/
public SimpleStream<T> filter(Predicate<T> predicate) {
List<T> result = new ArrayList<>();
for (T t : collection) {
if (predicate.test(t)) {
result.add(t);
}
}
return new SimpleStream<T>(result);
}
/**
* 循环遍历方法
*
* @param consumer
*/
public void forEach(Consumer<T> consumer) {
for (T t : collection) {
consumer.accept(t);
}
}
private Collection<T> collection;
public SimpleStream(Collection<T> collection) {
this.collection = collection;
}
public static <T> SimpleStream<T> of(Collection<T> collection) {
return new SimpleStream<>(collection);
}
}
写在最后
代码精选(www.codehuber.com),程序员的终身学习网站已上线!
如果这篇【文章】有帮助到你,希望可以给【JavaGPT】点个赞👍,创作不易,如果有对【后端技术】、【前端领域】感兴趣的小可爱,也欢迎关注❤️❤️❤️ 【JavaGPT】❤️❤️❤️,我将会给你带来巨大的【收获与惊喜】💝💝💝!