java8之Stream API

一、创建Stream

/*
     创建stream
     */
    @Test
    public void test2(){

//一次是 list集合,数组,Stream静态方法of(),普通对象stream.filter过滤
        List<String>  ls = new ArrayList<>();
        Stream<String> ss = ls.stream();

        Employee [] emarr  = new Employee[10];
        Stream<Employee> esarr = Arrays.stream(emarr);

        Stream<String> stringStream = Stream.of("1","2","3");

        Stream<Integer> integerStream  = Stream.iterate(0,(x)->x+2);
        integerStream.limit(10).forEach(System.out::println);

        Stream.generate(()->Math.random()).limit(10).forEach(System.out::println);

        Stream<Employee> ess = es.stream().filter(e->{
            System.out.println("filter...");
            return e.getAge()>1;
        });
        //这终止操作:一次性执行全部内容“惰性求值”;
        ess.forEach(System.out::println);

        //外部迭代
        Iterator<Employee> it = es.iterator();
        while (it.hasNext()){
            System.out.println(it.next());
        }
    }

二、map与flatmap 的区别

  Map和flatMap的区别: 
  1.map---接受Lamda,将元素转换成其他形式或提取信息,
     该函数会被应用到每个元素,并将其映射成一个新的元素。
  2.flatmap---接收一个函数作为参数,将流中的每个值
     都换成顶一个流,然后把所有流转换成一个流。

三、stream 的常用方法

allMatch:检查是否匹配所有元素。
anyMatch:检查是否至少匹配一个元素。
noneMatch:检查是否没有匹配所有元素。
findFirst:返回第一个元素。
fildAny:返回当前流中的任意元素。
Count:返回流中元素的总个数。
Max:返回流中的最大值。
Min:返回流中的最小值。
归约:reuce(T ientity,BinaryOperator)/reduce(BinaryOperator)可以将流中元素反复结合起来,得到一个值。

   //实体类中的一个属性:
    private Status Status;
    public enum Status{
        FREE,
        BUSY,
        VOCATION;
    }
@Test
public void test1() {
    boolean b1 = emps.stream().allMatch((e) -> e.getStatus().equals(Employee.Status.BUSY));
    boolean b2 = emps.stream().anyMatch(e -> e.getStatus().equals(Employee.Status.FREE));
    System.out.println(b1);
    System.out.println("-------------");
    System.out.println(b2);

    System.out.println("-------------");
    boolean b3 = emps.stream().noneMatch((e) -> e.getStatus().equals(Employee.Status.BUSY));
    System.out.println(b3);
    System.out.println("-------------");

    Optional<Employee> op = emps.stream().sorted(Comparator.comparingInt(Employee::getAge)).findAny();
    System.out.println(op.get());

    Optional<Employee> op1 = emps.stream().max(Comparator.comparingInt(Employee::getAge));
    System.out.println(op1);

    Optional<Integer> op2 = emps.stream().map(Employee::getAge).min(Integer::compare);
    System.out.println(op2);
}

三、使用stream拆分字符串为单个字符

    List<Employee> es = Arrays.asList(
            new Employee(3,"3",3),
            new Employee(1,"1",1),
            new Employee(4,"4",1),
            new Employee(2,"2",2)
    );
    @Test
    public void test2(){
        List<String> s =Arrays.asList("1as","2v","3f","4hm");
//        s.stream().map((str)->str.toUpperCase()).forEach(System.out::println);
//        es.stream().map(Employee::getAge).forEach(System.out::println);

        //拆分字符串为单个字符
        Stream<Stream<Character>> streamStream = s.stream().map(demo3::filterCharacter);
        streamStream.forEach((sm)->sm.forEach(System.out::println));
    }

    public static Stream<Character> filterCharacter(String str){
        //集合的add方法和addAll方法的区别 :addAll把 集合的全部内容加进去。
        // 比如list,那么包含list格式的信息,都会加进去。
        List<Character> ls = new ArrayList<>();
        for (Character c : str.toCharArray()) {
            ls.add(c);
        }
        return ls.stream();
    }

四、排序sorted

 @Test
    public void test2(){
        //自然排序
        List<String> ls = Arrays.asList("zzzz","aa","ccc","ddd");
        ls.stream().sorted().forEach(System.out::println);

        //定制排序
        es.stream().sorted((e1,e2)->{
            if(e1.getAge()==e2.getAge()){
                return e1.getName().compareTo(e2.getName());
            }else{
                return Integer.compare(e1.getAge(),e2.getAge());
            }
        }).forEach(System.out::println);
    }
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REaDME.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值