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());
        }
  • 相关阅读:
    Zend Framework 2.1.5 中根据服务器的环境配置调用数据库等的不同配置
    在基于 Eclipse 的 IDE 中安装和使用 Emmet(ZenCoding)
    【翻译】Emmet(Zen Coding)官方文档 之六 自定义 Emmet
    【翻译】Emmet(Zen Coding)官方文档 之二 缩写
    【翻译】Emmet(Zen Coding)官方文档 之七 一览表
    【翻译】Emmet(Zen Coding)官方文档 之三 CSS 缩写
    【翻译】Emmet(Zen Coding)官方文档 之四 动作
    【翻译】Emmet(Zen Coding)官方文档 之一 web 编程的必备工具
    Zend Framework 2 时区设置警告问题的解决
    【翻译】Emmet (Zen Coding) 元素类型
  • 原文地址:https://www.cnblogs.com/dqcer/p/9429566.html
Copyright © 2011-2022 走看看