posts - 325,  comments - 25,  trackbacks - 0
          public class TestStreamAPI2 {
           
           List<Employee> emps = Arrays.asList(
             new Employee(102, "李四", 59, 6666.66, Status.BUSY),
             new Employee(101, "張三", 18, 9999.99, Status.FREE),
             new Employee(103, "王五", 28, 3333.33, Status.VOCATION),
             new Employee(104, "趙六", 8, 7777.77, Status.BUSY),
             new Employee(104, "趙六", 8, 7777.77, Status.FREE),
             new Employee(104, "趙六", 8, 7777.77, Status.FREE),
             new Employee(105, "田七", 38, 5555.55, Status.BUSY)
           );
           
           //3. 終止操作
           /*
            allMatch——檢查是否匹配所有元素
            anyMatch——檢查是否至少匹配一個元素
            noneMatch——檢查是否沒有匹配的元素
            findFirst——返回第一個元素
            findAny——返回當前流中的任意元素
            count——返回流中元素的總個數
            max——返回流中最大值
            min——返回流中最小值
            */
           @Test
           public void test1(){
             boolean bl = emps.stream()
              .allMatch((e) -> e.getStatus().equals(Status.BUSY));
             
             System.out.println(bl);
             
             boolean bl1 = emps.stream()
              .anyMatch((e) -> e.getStatus().equals(Status.BUSY));
             
             System.out.println(bl1);
             
             boolean bl2 = emps.stream()
              .noneMatch((e) -> e.getStatus().equals(Status.BUSY));
             
             System.out.println(bl2);
           }
           
           @Test
           public void test2(){
            Optional<Employee> op = emps.stream()
             .sorted((e1, e2) -> Double.compare(e1.getSalary(), e2.getSalary()))
             .findFirst();
            
            System.out.println(op.get());
            
            System.out.println("--------------------------------");
            
            Optional<Employee> op2 = emps.parallelStream()
             .filter((e) -> e.getStatus().equals(Status.FREE))
             .findAny();
            
            System.out.println(op2.get());
           }
           
           @Test
           public void test3(){
            long count = emps.stream()
                 .filter((e) -> e.getStatus().equals(Status.FREE))
                 .count();
            
            System.out.println(count);
            
            Optional<Double> op = emps.stream()
             .map(Employee::getSalary)
             .max(Double::compare);
            
            System.out.println(op.get());
            
            Optional<Employee> op2 = emps.stream()
             .min((e1, e2) -> Double.compare(e1.getSalary(), e2.getSalary()));
            
            System.out.println(op2.get());
           }
           
           //注意:流進行了終止操作后,不能再次使用
           @Test
           public void test4(){
            Stream<Employee> stream = emps.stream()
             .filter((e) -> e.getStatus().equals(Status.FREE));
            
            long count = stream.count();
            
            stream.map(Employee::getSalary)
             .max(Double::compare);
           }
          }


          public class TestStreamAPI3 {
           
           List<Employee> emps = Arrays.asList(
             new Employee(102, "李四", 79, 6666.66, Status.BUSY),
             new Employee(101, "張三", 18, 9999.99, Status.FREE),
             new Employee(103, "王五", 28, 3333.33, Status.VOCATION),
             new Employee(104, "趙六", 8, 7777.77, Status.BUSY),
             new Employee(104, "趙六", 8, 7777.77, Status.FREE),
             new Employee(104, "趙六", 8, 7777.77, Status.FREE),
             new Employee(105, "田七", 38, 5555.55, Status.BUSY)
           );
           
           //3. 終止操作
           /*
            歸約
            reduce(T identity, BinaryOperator) / reduce(BinaryOperator) ——可以將流中元素反復結合起來,得到一個值。
            */
           @Test
           public void test1(){
            List<Integer> list = Arrays.asList(1,2,3,4,5,6,7,8,9,10);
            
            Integer sum = list.stream()
             .reduce(0, (x, y) -> x + y);
            
            System.out.println(sum);
            
            System.out.println("----------------------------------------");
            
            Optional<Double> op = emps.stream()
             .map(Employee::getSalary)
             .reduce(Double::sum);
            
            System.out.println(op.get());
           }
           
           //需求:搜索名字中 “六” 出現的次數
           @Test
           public void test2(){
            Optional<Integer> sum = emps.stream()
             .map(Employee::getName)
             .flatMap(TestStreamAPI1::filterCharacter)
             .map((ch) -> {
              if(ch.equals('六'))
               return 1;
              else
               return 0;
             }).reduce(Integer::sum);
            
            System.out.println(sum.get());
           }
           
           //collect——將流轉換為其他形式。接收一個 Collector接口的實現,用于給Stream中元素做匯總的方法
           @Test
           public void test3(){
            List<String> list = emps.stream()
             .map(Employee::getName)
             .collect(Collectors.toList());
            
            list.forEach(System.out::println);
            
            System.out.println("----------------------------------");
            
            Set<String> set = emps.stream()
             .map(Employee::getName)
             .collect(Collectors.toSet());
            
            set.forEach(System.out::println);

            System.out.println("----------------------------------");
            
            HashSet<String> hs = emps.stream()
             .map(Employee::getName)
             .collect(Collectors.toCollection(HashSet::new));
            
            hs.forEach(System.out::println);
           }
           
           @Test
           public void test4(){
            Optional<Double> max = emps.stream()
             .map(Employee::getSalary)
             .collect(Collectors.maxBy(Double::compare));
            
            System.out.println(max.get());
            
            Optional<Employee> op = emps.stream()
             .collect(Collectors.minBy((e1, e2) -> Double.compare(e1.getSalary(), e2.getSalary())));
            
            System.out.println(op.get());
            
            Double sum = emps.stream()
             .collect(Collectors.summingDouble(Employee::getSalary));
            
            System.out.println(sum);
            
            Double avg = emps.stream()
             .collect(Collectors.averagingDouble(Employee::getSalary));
            
            System.out.println(avg);
            
            Long count = emps.stream()
             .collect(Collectors.counting());
            
            System.out.println(count);
            
            System.out.println("--------------------------------------------");
            
            DoubleSummaryStatistics dss = emps.stream()
             .collect(Collectors.summarizingDouble(Employee::getSalary));
            
            System.out.println(dss.getMax());
           }
           
           //分組
           @Test
           public void test5(){
            Map<Status, List<Employee>> map = emps.stream()
             .collect(Collectors.groupingBy(Employee::getStatus));
            
            System.out.println(map);
           }
           
           //多級分組
           @Test
           public void test6(){
            Map<Status, Map<String, List<Employee>>> map = emps.stream()
             .collect(Collectors.groupingBy(Employee::getStatus, Collectors.groupingBy((e) -> {
              if(e.getAge() >= 60)
               return "老年";
              else if(e.getAge() >= 35)
               return "中年";
              else
               return "成年";
             })));
            
            System.out.println(map);
           }
           
           //分區
           @Test
           public void test7(){
            Map<Boolean, List<Employee>> map = emps.stream()
             .collect(Collectors.partitioningBy((e) -> e.getSalary() >= 5000));
            
            System.out.println(map);
           }
           
           //
           @Test
           public void test8(){
            String str = emps.stream()
             .map(Employee::getName)
             .collect(Collectors.joining("," , "----", "----"));
            
            System.out.println(str);
           }
           
           @Test
           public void test9(){
            Optional<Double> sum = emps.stream()
             .map(Employee::getSalary)
             .collect(Collectors.reducing(Double::sum));
            
            System.out.println(sum.get());
           }
          }

          posted on 2018-03-06 08:40 長春語林科技 閱讀(514) 評論(0)  編輯  收藏 所屬分類: java8
          <2018年3月>
          25262728123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

           

          長春語林科技歡迎您!

          常用鏈接

          留言簿(6)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          相冊

          收藏夾

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 广元市| 葫芦岛市| 金昌市| 宾川县| 彝良县| 额敏县| 浮山县| 晋宁县| 顺昌县| 开阳县| 阿克苏市| 乌拉特中旗| 桃江县| 南丹县| 玛沁县| 安宁市| 揭西县| 丹江口市| 通城县| 辉南县| 手机| 汉阴县| 大冶市| 和顺县| 汉中市| 东阳市| 比如县| 高安市| 晴隆县| 乌拉特前旗| 卢湾区| 深圳市| 木里| 舒兰市| 潢川县| 黑水县| 普兰县| 库车县| 淳安县| 六安市| 鹰潭市|