JAVA8 新特性 Stream流

一 Stream 的三个操作步骤

1.创建Stream

2.中间操作

3.终止操作(终端操作)

创建 Stream

1.通过Collection 系列集合提供的Stream() 或者 parallelStream()

   List<String> list = new ArrayList<>();
   Stream<String> stream = list.stream();

2.通过Arrays 中的静态方法stream()获取数组流

 Employee[] emps = new Employee[10];
 Stream<Employee> stream1 = Arrays.stream(emps);

3.通过Stream类中的静态方法of()

Stream<String> stream3 = Stream.of("aa", "bb", "cc");

4.创建无限流

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

5.生成

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

中间操作

筛选与切片

filter-接收 Lambda,从流中排除某些元素。

limit 截断流

skip(n) 跳过元素,返回一个扔掉了前n个元素的流。若流中元素不足n个,则返回一个空流,与limit(n)互补

distinct 筛选,通过流所生成元素的hashCode() 和 equals() 去除重复元素

       UserModel userModel=new UserModel();
       List<UserModel> use=new ArrayList<>();

       Stream<UserModel> stream2 = use.stream()
                .filter((e) -> {
                    System.out.println("中间操作");
                    return e.getId() > 10;
                }).limit(2)
                .distinct();
        //终止操作:一次性执行全部内容,即“惰性求值”
        stream2.forEach(System.out::println);

多个中间操作可以连接起来形成一个流水线,除非流水线上出发终止操作,否则中间操作不会执行任何的处理!而在终止操作时一次性保存处理,称为“惰性求值”。

映射
map 接收lambada ,将元素转换成其他形式或提取信息,接收一个函数座位参数,该函数会被用到每个元素上,并将其映射成一个新的元素。

List<String> list1=Arrays.asList("aaa","bbb","ccc","ddd","eee");
list1.stream()
        .map((str)->str.toUpperCase())
        .forEach(System.out::println);

flatmap 接收一个函数座位参数,将流中的每个值转换成另外一个流,然后把所有流连成一个流

排序
sorted()–自然排序

  List<String> list2 =Arrays.asList("ccc","aaa","bbb","ddd","eee");
        list2.stream()
             .sorted().forEach(System.out::println);

sorted(Comparator com) 定制排序

   List<UserModel> use=new ArrayList<>();
   use.stream()
      .sorted((e1,e2)->{
                    if(e1.getId().equals(e2.getId())){
                        return e1.getName().compareTo(e2.getName());
                    }else{
                        return e1.getTime().compareTo(e2.getTime());
                    }
                }).forEach(System.out::println);

终止操作

查找与匹配
allmatch–检查是否匹配所有元素
anyMatch 检查是否至少匹配一个元素
noneMatCh 检查是否没有匹配所有元素
findFirst 返回第一个元素
findAny 返回当前流中的任意元素
count 返回流中元素的总个数
max 返回流中最大值
mix返回流中的最小值

收集
collect --将流转换成其他形式,接收一个Collector接口的实现,用于给Stream中元素做汇总的方法

  List<UserModel> use=new ArrayList<>();
  ...list自行添加填充
List<Integer> collect = use.stream()
                .map(UserModel::getId)
                .collect(Collectors.toList());

大家有任何疑问可留言
转载记得贴上来源

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值