java8新特性 -------------stream 的终止操作


如果对象没有的话,请看我的java8的分类

import com.gl.java8test.User;

import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * create gl 
 **/
public class Test03 {

    /**
     * 终止操作
     *
     *  查找与匹配
     *  allMatch --检查是否匹配所有元素
     *  anyMatch --检查是否至少匹配一个元素
     *  noneMatch --检查是否没有匹配所有元素
     *  findFirst -- 返回第一个元素
     *  findAny -- 返回流中的任意一个元素
     *  count -- 返回流中的总个数
     *  max -- 返回流中最大值
     *  min -- 返回流中最小值
     *
     */

    public static List userList = Arrays.asList(
            new User("gl",25,"男",User.Status.FREE),
            new User("张三",35,"男",User.Status.BUSY),
            new User("美女",22,"女",User.Status.VOCATION),
            new User("李四",48,"男",User.Status.FREE),
            new User("王五",19,"男",User.Status.BUSY),
            new User("王五",19,"男",User.Status.VOCATION),
            new User("王五",19,"男",User.Status.FREE)
    );

    public static void test1(){
        // 检查是否全部是空闲
        boolean bool= userList.stream()
                 .allMatch( user -> user.getStatus().equals(User.Status.FREE));
        System.out.println(bool);

        System.out.println("---------------------------");

        // 检查是否至少匹配一个元素
        boolean bool2= userList.stream()
                .anyMatch( user -> user.getStatus().equals(User.Status.FREE));
        System.out.println(bool2);

        System.out.println("-----------------------------");

        boolean bool3= userList.stream()
                .noneMatch( user -> user.getStatus().equals(User.Status.FREE));
        System.out.println(bool3);

        System.out.println("-------------------------------");

       Optional optionalUser = userList.stream()      //串行流
                .sorted( (u1,u2) -> -Integer.compare(u1.getAge(),u2.getAge()))
                .findFirst();
        System.out.println(optionalUser.get());

        System.out.println("---------------------------------");
       Optional optionalUser1 = userList.parallelStream()    //并行流
                .filter( e -> e.getStatus().equals(User.Status.FREE))
                .findAny();
        System.out.println(optionalUser1.get());

        System.out.println("---------------------------------");

        long lo = userList.stream()
                .count();
        System.out.println(lo);

        System.out.println("---------------------------------");

       Optional minAge = userList.stream()
                .map(User::getAge)
                .min(Integer::compareTo);

        System.out.println(minAge.get());
    }


    /**
     *  归约
     *  reduce (T identity,BinaryOperation) / reduce (BinaryOperation) ----可以将流中元素反复结合起来 得到新值
     *
     */

    public static void test2(){
        List list = Arrays.asList(1,2,3,4,5,6,7,8,9,10);
        Integer sum = list.stream()
            .reduce(0, (x,y) -> x+y ); // 先将0作为x,然后运算 0+1,再将这个结果作为x,运算 1+2,y为集合的元素,x就作为运算结果
        System.out.println(sum);

        System.out.println("----------------------------------");

        Optional sum1 = userList.stream()
                .map(User::getAge)
                .reduce(Integer::sum);
        System.out.println(sum1.get());
    }


    /**
     *  收集
     *  collect---将流转换为其他形式,接收一个Collector的实现,用于给元素汇总的方法
     */


    public static void test3(){
        List list = userList.stream()
                .map(User::getName)
                .collect(Collectors.toList());

        System.out.println("-----------------------------");

        Set set = userList.stream()
                .map(User::getName)
                .collect(Collectors.toSet());

        System.out.println("-----------------------------");

        HashSet hashSet = userList.stream()
                .map(User::getName)
                .collect(Collectors.toCollection(HashSet::new));

    }

    public static void test4(){
        //总数
       long count = userList.stream()
                .collect(Collectors.counting());

       //获取平均值
       Double age = userList.stream()
                .collect(Collectors.averagingInt(User::getAge));  //返回的都是double
        System.out.println(age);

        // 总和
       int summ = userList.stream().collect(Collectors.summingInt(User::getAge));
        System.out.println(summ);

        // 得到年龄最大的对象
       Optional optionalUser = userList.stream()
                .collect(Collectors.maxBy( (u1,u2) -> Integer.compare(u1.getAge(),u2.getAge())));

      Optional maxAge = userList.stream()
               .map(User::getAge)
               .collect(Collectors.maxBy(Integer::compare));

        System.out.println(maxAge);

        System.out.println("-----------------------------------------");

        //另外一种获取方式

        DoubleSummaryStatistics statistics = userList.stream()
                .collect(Collectors.summarizingDouble(User::getAge));
        System.out.println(statistics.getAverage());
        System.out.println(statistics.getCount());
        System.out.println(statistics.getMax());
        System.out.println(statistics.getMin());
        System.out.println(statistics.getSum());

    }


    /**
     *  分组
     */

    public static void test5(){
       Map,List> statusListMap = userList.stream()
                .collect(Collectors.groupingBy(User::getStatus));
        System.out.println(statusListMap);


        System.out.println("---------------------------------------");

        //多级分组

       Map,Map,List>> statusMapMap = userList.stream()
                .collect(Collectors.groupingBy(User::getStatus,Collectors.groupingBy( e ->{
                    if(( (User) e).getAge() <= 25){   //这里强转的形式注意下
                        return "年轻";
                    }else if( ((User) e).getAge()>25 && ((User) e).getAge()<=35){
                        return "中年";
                    }else {
                        return "老年";
                    }
                } )));
        System.out.println(statusMapMap);
    }

    /**
     *  分区
     *
     */

    public static void test6(){
       Map,List> booleanListMap = userList.stream()
                .collect(Collectors.partitioningBy( e -> e.getAge() >30));
        System.out.println(booleanListMap);
    }

    // 其他操作
    public static void test7(){
        String collect = userList.stream()
                .map(User::getName)
                .collect(Collectors.joining(","));
        System.out.println(collect);

        System.out.println("-----------------------------------");

        String collect1 = userList.stream()
                .map(User::getName)
                .collect(Collectors.joining(",","------","======"));
        System.out.println(collect1);

    }


    public static void main(String[] args) {
//        test1();
//        test2();
//        test4();
//        test5();
//        test6();
        test7();
    }


}












你可能感兴趣的:(java8)