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】❤️❤️❤️,我将会给你带来巨大的【收获与惊喜】💝💝💝!