Java 8特性(一) 之 手写Stream流filter、map和forEach方法

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

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JavaGPT

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值