java流式编程

Reference

lambda之Stream流式编程;
20道关于Stream流的题目练习;

\color{red}{注意:所有的流对象只能使用一次,重复使用会报错:}
\color{red}{Exception in thread "main" java.lang.IllegalStateException: stream has already been operated upon or closed}
题目1:筛选学生不及格次数2次及2次以上的学生列表

        List<String> failCountStudent = studentList.stream().filter(s -> s.getFailCount()>=2).map(s -> s.getName()).collect(Collectors.toList());
        System.out.println(failCountStudent);

题目:2:筛选班主任和科任老师负责的学生中有多少个不及格次数超过2次的

        Map<String, List<Student>> arrayList1 = studentList.stream().filter(s -> s.getFailCount() >= 1).collect(Collectors.groupingBy(Student::getChineseTeacher));
        System.out.println(arrayList1.size());
        //遍历
        for(Map.Entry<String, List<Student>> entry:arrayList1.entrySet()){
            System.out.println(entry.getKey()+"--->"+entry.getValue());
        }

题目3:筛选不及格次数超过2次且班主任不是王老师和汪老师的

        List<Student>  students =  studentList.stream().filter(s -> s.getFailCount() >= 2 && (!"王老师".equals(s.getChineseTeacher()) && !"汪老师".equals(s.getChineseTeacher()))).collect(Collectors.toList());
        System.out.println(students);

题目4:提取学生列表中所有学生的名字

        List<String>  nameList = studentList.stream().map(s -> s.getName()).collect(Collectors.toList());
        System.out.println(nameList);

题目5:提取不及格次数为0的学生为三好学生并给isMeritStudent 赋值

        List<Student> meritStudents = studentList.stream().map(s -> {
        if (s.getFailCount() == 0){
            s.setIsMeritStudent(true);
        } else {
            s.setIsMeritStudent(false);
        }
        return s;
        }).collect(Collectors.toList());
        System.out.println(meritStudents);

题目6:统计所有老师名字,并列出所有老师所带的学生

        System.out.print("----------------------------------------------This is ChineseTeacher:\n");
        Map<String,List<Student>> chineseTeacherMap =  studentList.stream().collect(Collectors.groupingBy(Student::getChineseTeacher));
        for(Map.Entry<String, List<Student>> entry:chineseTeacherMap.entrySet()){
            System.out.println(entry.getKey()+"--->"+entry.getValue());
        }
        System.out.println("----------------------------------------------This is ClassTeacher:\n");
        Map<String, List<Student>> classTeacherMap = studentList.stream().collect(Collectors.groupingBy(Student::getClassTeacher));
        for(Map.Entry<String, List<Student>> entry:classTeacherMap.entrySet()){
            System.out.println(entry.getKey()+"--->"+entry.getValue());
        }

题目7:有如下整数1,-1,-2,-3,-4,-5 使用Stream取元素绝对值并打印

        Stream<Integer> stream = Stream.of(1, -1,-2, -3,-4, -5);
        stream.map(Math::abs).forEach(System.out::println);

题目8:给定一个数字列表,如何返回一个由每个数的平方构成的列表

        List<Integer> list = Arrays.asList(1,2,3,4,6,5);
        list.stream().map(x -> x * x).forEach(System.out::println);

如下有7个元素黄药师,冯蘅,郭靖,黄蓉,郭蓉 ,郭襄,郭破虏
题目9:使用stream将以郭字开头的元素存入新集合

        Stream<String> stream = Stream.of("黄药师", "郭靖", "黄蓉", "宋江", "郭霞", "郭美");
        List<String> list = stream.collect(Collectors.toList()).stream().filter(s -> s.startsWith("郭")).collect(Collectors.toList());
        System.out.println(list);

已知ArrayList集合中有如下元素{陈玄风、梅超风、陆乘风、曲灵风、武眠风、冯默风、罗玉风}
题目10:取出前两个元素并在控制台打印输出
题目11:取出后两个元素并在控制台打印输出

        List str = new ArrayList<>();
        str.add("陈玄风");
        str.add("梅超风");
        str.add("陆乘风");
        str.add("曲灵风");
        str.add("武眠风");
        str.add("冯默风");
        str.add("罗玉风");
        Stream<String> stream = str.stream();
        stream.limit(2).forEach(System.out::println);
        //stream.limit(2).forEach(e -> System.out.println(e));
        System.out.println("-----------------------");
        Stream<String> stream1 = str.stream();
        stream1.skip(str.size() - 2).forEach(System.out::println);

题目12:找出2011年发生的所有交易, 并按交易额排序(从低到高)

        
        List<Transaction> transcations = Arrays.asList(
                new Transaction(2011,300),
                new Transaction(2012,1000),
                new Transaction(2011,400),
                new Transaction(2012,800),
                new Transaction(2011,350)

        );
        Stream<Transaction> stream = transcations.stream();
        List<Transaction> list = stream.filter(s -> s.getYear() == 2011).sorted((e1, e2) -> e1.getValue() - e2.getValue()).collect(Collectors.toList());
        System.out.println(list);

题目13:怎样使用map和reduce方法数一数流中有多少个Transaction呢?

        Stream<Transaction> stream1 = transcations.stream();
        Integer sum = stream1.map(e -> 1).reduce(Integer::sum).get();
        System.out.println(sum);

题目14:现在有两个Arraylist集合,分别存储6名男演员和6女演员的名称,要求完成如下的操作:
题目15:把过滤后的男演员女演员合并

        List<Actor> womanList = Arrays.asList(
                new Actor("林美丽", false),
                new Actor("阿花", false),
                new Actor("林黛玉", false),
                new Actor("韩红", false),
                new Actor("林冲", false),
                new Actor("李丽", false)
        );
        List<Actor> manList = Arrays.asList(
                new Actor("赵聪", true),
                new Actor("钱精忠", true),
                new Actor("孙飞", true),
                new Actor("李光", true),
                new Actor("周斌", true),
                new Actor("吴正", true)
        );
        List<Actor> womanResults = womanList.stream().filter(e -> e.getName().startsWith("林")).skip(1).collect(Collectors.toList());
        System.out.println(womanResults);
        
        List<Actor> unionActors = Stream.concat(womanResults.stream(),manList.stream()).collect(Collectors.toList());
        System.out.println(unionActors);

我国有34个省级行政区,分别是:
23个省:河北省、山西省、吉林省、辽宁省、黑龙江省、陕西省、甘肃省、青海省、山东省、福建省、浙江省、台湾省、河南省、湖北省、湖南省、江西省、江苏省、安徽省、广东省、海南省、四川省、贵州省、云南省。
4个直辖市:北京市、天津市、上海市、重庆市。 5个自治区:内蒙古自治区、新疆维吾尔自治区、宁夏回族自治区、广西壮族自治区、西藏自治区。
2个特别行政区:香港特别行政区、澳门特别行政区。 请使用流依次完成下列操作:
题目17:统计不是三个字的省份的个数
题目18:统计名字中包含方位名词的省份(东西南北)的个数
题目19:打印名字中包含方位名词的普通省份(非自治区直辖市特别行政区)的名字
题目20:将所有的特殊省份(自治区直辖市特别行政区)提取出来并放到新数组中

        List<String> provinces = Arrays.asList("河北省", "山西省", "吉林省", "辽宁省",
                "黑龙江省", "陕西省", "甘肃省", "青海省", "山东省",
                "福建省", "浙江省", "台湾省", "河南省", "湖北省",
                "湖南省", "江西省", "江苏省", "安徽省", "广东省",
                "海南省", "四川省", "贵州省", "云南省", "北京市",
                "天津市", "上海市", "重庆市", "内蒙古自治区",
                "新疆维吾尔自治区", "宁夏回族自治区", "广西壮族自治区",
                "西藏自治区", "香港特别行政区", "澳门特别行政区");
        Long sum = provinces.stream().filter(s -> s.length() != 3).count();
        System.out.println(sum);
        Long sum = provinces.stream().filter(s -> s.contains("东")||s.contains("西")||s.contains("南")||s.contains("北")).count();
        System.out.println(sum);
        provinces.stream().filter(s -> !s.contains("自治区") && !s.contains("直辖市") && !s.contains("特别行政区") && (s.contains("东")||s.contains("西")||s.contains("南")||s.contains("北"))).forEach(e -> System.out.println(e));

       List<String> exceptProvinces  = provinces.stream().filter(s -> s.contains("自治区")|| s.contains("直辖市") || s.contains("特别行政区") ).collect(Collectors.toList());
       System.out.println(exceptProvinces);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,029评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,395评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,570评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,535评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,650评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,850评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,006评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,747评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,207评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,536评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,683评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,342评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,964评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,772评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,004评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,401评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,566评论 2 349

推荐阅读更多精彩内容