java流式編程

Reference

Lambda之Stream流式編程;
20道關(guān)于Stream流的題目練習(xí);

\color{red}{注意:所有的流對象只能使用一次,重復(fù)使用會報錯:}
\color{red}{Exception in thread "main" java.lang.IllegalStateException: stream has already been operated upon or closed}
題目1:篩選學(xué)生不及格次數(shù)2次及2次以上的學(xué)生列表

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

題目:2:篩選班主任和科任老師負責(zé)的學(xué)生中有多少個不及格次數(shù)超過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:篩選不及格次數(shù)超過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:提取學(xué)生列表中所有學(xué)生的名字

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

題目5:提取不及格次數(shù)為0的學(xué)生為三好學(xué)生并給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:統(tǒng)計所有老師名字平项,并列出所有老師所帶的學(xué)生

        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:有如下整數(shù)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:給定一個數(shù)字列表,如何返回一個由每個數(shù)的平方構(gòu)成的列表

        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集合中有如下元素{陳玄風(fēng)湖雹、梅超風(fēng)咏闪、陸乘風(fēng)、曲靈風(fēng)摔吏、武眠風(fēng)鸽嫂、馮默風(fēng)纵装、羅玉風(fēng)}
題目10:取出前兩個元素并在控制臺打印輸出
題目11:取出后兩個元素并在控制臺打印輸出

        List str = new ArrayList<>();
        str.add("陳玄風(fēng)");
        str.add("梅超風(fēng)");
        str.add("陸乘風(fēng)");
        str.add("曲靈風(fēng)");
        str.add("武眠風(fēng)");
        str.add("馮默風(fēng)");
        str.add("羅玉風(fēng)");
        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年發(fā)生的所有交易, 并按交易額排序(從低到高)

        
        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方法數(shù)一數(shù)流中有多少個Transaction呢据某?

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

題目14:現(xiàn)在有兩個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個省級行政區(qū)癣籽,分別是:
23個释彀Α:河北省、山西省筷狼、吉林省瓶籽、遼寧省、黑龍江省桑逝、陜西省棘劣、甘肅省、青海省楞遏、山東省茬暇、福建省、浙江省寡喝、臺灣省糙俗、河南省、湖北省预鬓、湖南省巧骚、江西省、江蘇省格二、安徽省劈彪、廣東省、海南省顶猜、四川省沧奴、貴州省、云南省长窄。
4個直轄市:北京市滔吠、天津市、上海市挠日、重慶市疮绷。 5個自治區(qū):內(nèi)蒙古自治區(qū)、新疆維吾爾自治區(qū)嚣潜、寧夏回族自治區(qū)冬骚、廣西壯族自治區(qū)、西藏自治區(qū)。
2個特別行政區(qū):香港特別行政區(qū)只冻、澳門特別行政區(qū)夜涕。 請使用流依次完成下列操作:
題目17:統(tǒng)計不是三個字的省份的個數(shù)
題目18:統(tǒng)計名字中包含方位名詞的省份(東西南北)的個數(shù)
題目19:打印名字中包含方位名詞的普通省份(非自治區(qū)直轄市特別行政區(qū))的名字
題目20:將所有的特殊省份(自治區(qū)直轄市特別行政區(qū))提取出來并放到新數(shù)組中

        List<String> provinces = Arrays.asList("河北省", "山西省", "吉林省", "遼寧省",
                "黑龍江省", "陜西省", "甘肅省", "青海省", "山東省",
                "福建省", "浙江省", "臺灣省", "河南省", "湖北省",
                "湖南省", "江西省", "江蘇省", "安徽省", "廣東省",
                "海南省", "四川省", "貴州省", "云南省", "北京市",
                "天津市", "上海市", "重慶市", "內(nèi)蒙古自治區(qū)",
                "新疆維吾爾自治區(qū)", "寧夏回族自治區(qū)", "廣西壯族自治區(qū)",
                "西藏自治區(qū)", "香港特別行政區(qū)", "澳門特別行政區(qū)");
        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("自治區(qū)") && !s.contains("直轄市") && !s.contains("特別行政區(qū)") && (s.contains("東")||s.contains("西")||s.contains("南")||s.contains("北"))).forEach(e -> System.out.println(e));

       List<String> exceptProvinces  = provinces.stream().filter(s -> s.contains("自治區(qū)")|| s.contains("直轄市") || s.contains("特別行政區(qū)") ).collect(Collectors.toList());
       System.out.println(exceptProvinces);

題目21:判斷對象某一屬性值是否相同

        List<EnquiryOrder> enquiryOrders = commonDao.loadAll(EnquiryOrder.class, ids);
        String firstCompanyName = enquiryOrders.get(0).getCompanyName();
        //所有公司名都相同,返回true属愤,否則返回false
        Boolean isSameCompany = enquiryOrders.stream().map(EnquiryOrder::getCompanyName).allMatch(firstCompanyName :: equals);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末女器,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子住诸,更是在濱河造成了極大的恐慌驾胆,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件贱呐,死亡現(xiàn)場離奇詭異丧诺,居然都是意外死亡,警方通過查閱死者的電腦和手機奄薇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進店門驳阎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人馁蒂,你說我怎么就攤上這事呵晚。” “怎么了沫屡?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵饵隙,是天一觀的道長。 經(jīng)常有香客問我沮脖,道長金矛,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任勺届,我火速辦了婚禮驶俊,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘免姿。我一直安慰自己饼酿,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布养泡。 她就那樣靜靜地躺著嗜湃,像睡著了一般奈应。 火紅的嫁衣襯著肌膚如雪澜掩。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天杖挣,我揣著相機與錄音肩榕,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛株汉,可吹牛的內(nèi)容都是我干的筐乳。 我是一名探鬼主播,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼乔妈,長吁一口氣:“原來是場噩夢啊……” “哼蝙云!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起路召,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤勃刨,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后股淡,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體身隐,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年唯灵,在試婚紗的時候發(fā)現(xiàn)自己被綠了贾铝。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡埠帕,死狀恐怖垢揩,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情敛瓷,我是刑警寧澤水孩,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站琐驴,受9級特大地震影響俘种,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜绝淡,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一宙刘、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧牢酵,春花似錦悬包、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至丝格,卻和暖如春撑瞧,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背显蝌。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工预伺, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓酬诀,卻偏偏與公主長得像脏嚷,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子瞒御,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,927評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 知識點: 線程生命周期(新建父叙、運行、阻塞肴裙、等待(一直等待)高每、超時等待(超時取消等待)、終止)践宴; Synchroni...
    CJ21閱讀 1,742評論 1 21
  • Java異步編程實戰(zhàn) chap1 認識異步編程 異步編程概念與作用在使用同步編程方式時鲸匿,由于每個線程同時只能發(fā)起一...
    landon30閱讀 1,189評論 0 0
  • 一、基礎(chǔ)篇JVM JVM內(nèi)存結(jié)構(gòu) 堆阻肩、棧带欢、方法區(qū)、直接內(nèi)存烤惊、堆和棧區(qū)別 https://blog.csdn.net...
    jackcooper閱讀 1,403評論 2 61
  • 《 Kotlin + Spring Boot : 下一代 Java 服務(wù)端開發(fā) 》 《Spring Boot 開發(fā)...
    光劍書架上的書閱讀 9,249評論 32 123
  • 集合優(yōu)化了對象的存儲乔煞,而流則是對數(shù)據(jù)的處理 流是一系列與特定存儲機制無關(guān)的元素,利用流柒室,我們無需迭代集合中的元素渡贾,...
    Jay丶x閱讀 928評論 0 0