zoukankan      html  css  js  c++  java
  • java8 for循环了改为 流

    刚开始用java8的时候,很多都是替代for循环,因为java8推出了强大的流stream,关于流的用法很多,百度一下就可以搜到语法之类,所以这里我只想举一些简单替代for的例子,含义那些就自己去查吧。 
    好了,让我们开始吧。男人类有很多卡类,先初始化一些数据。

    List<Man> mans = new ArrayList<>();
            mans.add(new Man("001","张三",Arrays.asList(new Card("工商银行","9558800001"),new Card("工商银行","9558800002"),new Card("建设银行","6227001234"))));
            mans.add(new Man("002","李四",Arrays.asList(new Card("招商银行","6225800002"),new Card("建设银行","6227035248"))));
            mans.add(new Man("003","王五",Arrays.asList(new Card("建设银行","6227056547"),new Card("中国银行","6013832547"),new Card("民生银行","4074058542"))));
            mans.add(new Man("004","赵六",Arrays.asList(new Card("工商银行","9558832458"),new Card("工商银行","9558832547"),new Card("建设银行","6227032578"))));
            mans.add(new Man("005","孙七",Arrays.asList(new Card("中国银行","6013825847"),new Card("农业银行","6228836547"),new Card("招商银行","6225014582"))));
            mans.add(new Man("006","张三",Arrays.asList(new Card("工商银行","9558832587"),new Card("交通银行","6222814578"),new Card("工商银行","9558865427"))));

    1,查找张三的男人,for是这样的,

    public List<Man> getByName(List<Man> mans){
            List<Man> temp = new ArrayList<>();
            for(Man man : mans){
                if("张三".equals(man.getName())){
                    temp.add(man);
                }
            }
            return temp;
        }

    改进后为:

    public List<Man> getByName8(List<Man> mans) {
            return mans.stream().filter(m -> "张三".equals(m.getName())).collect(Collectors.toList());
        }

    这里的集合相当与数据库的表,而filter相当于数据库的where。 
    2,继续,查找id为007的男人,id唯一,for是这样的

    public Man getById(List<Man> mans) {
            for (Man man : mans) {
                if ("007".equals(man.getId())) {
                    return man;
                }
            }
            return null;
        }

    改进后为:

    public Man getById8(List<Man> mans) {
            return mans.stream().filter(m -> "oo7".equals(m.getId())).findFirst().orElse(null);
        }

    3,继续,获取名字叫张三(因有同名)的所有银行卡,这里不讨论实际业务意义,只讲技术,哈哈,用for是这样的。

    public List<Card> getAllCardByName(List<Man> mans) {
            List<Card> cards = new ArrayList<>();
            for (Man man : mans) {
                if ("张三".equals(man.getName())) {
                    cards.addAll(man.getCards());
                }
            }
            return cards;
        }

    改进后是这样的

    public List<Card> getAllCardByName8(List<Man> mans) {
            return mans.stream().filter(m -> "张三".equals(m.getName())).flatMap(m -> m.getCards().stream())
                    .collect(Collectors.toList());
        }

    4,继续,在3的条件上加个工商银行条件,for

    public List<Card> getSomeCardByName(List<Man> mans) {
            List<Card> cards = new ArrayList<>();
            for (Man man : mans) {
                if ("张三".equals(man.getName())) {
                    for (Card card : man.getCards()) {
                        if ("工商银行".equals(card.getName())) {
                            cards.add(card);
                        }
                    }
                }
            }
            return cards;
        }

    改进后是这样的

    public List<Card> getSomeCardByName8(List<Man> mans) {
            return mans.stream().filter(m -> "张三".equals(m.getName())).flatMap(m -> m.getCards().stream())
                    .filter(c -> "工商银行".equals(c.getName())).collect(Collectors.toList());
        }

    5,把张三的名字修改为新张三,for,注意会改变源数据

    public List<Man> changeName(List<Man> mans) {
            for (Man man : mans) {
                if ("张三".equals(man.getName())) {
                    man.setName("新张三");
                }
            }
            return mans;
        }

    改进:

    public List<Man> changeName8(List<Man> mans) {
            return mans.stream().peek(m -> {
                if ("张三".equals(m.getName()))
                    m.setName("新张三");
            }).collect(Collectors.toList());
        }
  • 相关阅读:
    《魏坤琳的科学育儿宝典》笔记
    大千世界中,万物皆有时节
    心里健康基本要素
    不带评论的观察是人类智力的最高形式
    《七律·人民解放军占领南京》
    《最好的防御就是进攻》-- 向任总汇报无线业务会议纪要 2013年9月5日
    《深淘滩,低作堰》-- 任正非在运作与交付体系奋斗表彰大会上的讲话 2009年4月24日
    《市场经济是最好的竞争方式,经济全球化是不可阻挡的潮流》-- 任正非在财经系统表彰大会上的讲话 2009年3月24日
    《开放、妥协与灰度》-- 任正非在2009年全球市场工作会议上的讲话 2009年1月15日
    《让青春的火花,点燃无愧无悔的人生》-- 任正非在无线产品线奋斗大会上的讲话纪要 2008年5月31日
  • 原文地址:https://www.cnblogs.com/dqcer/p/9429566.html
Copyright © 2011-2022 走看看