每日一血: java8之stream

Stream是java8引入的一个语法糖.好吃.
简单的聊聊用法.

流的来源

1.在java中,流一般分为有限流和无限流.
有限流一般是从数组转换而来
无限流一般由生成器或者迭代器生成.

1.循环输出

//循环10次
for (int i = 0; i < 10; i++) {
    System.out.println(i);
}
// 改造-->
Stream.iterate(0,f->f+1).limit(10).forEach(System.out::println);

2.1+2+4+8…

void stream2(){
   // 1+2+4+8
   int total = 0;
   for (int i = 0; i < 10; i++) {
       total += 2^i;
   }
   // 改造
   System.out.println(total);
   Integer result = Stream.iterate(1, f -> f * 2).limit(10).reduce((a, b) -> a + b).get();
   System.out.println(result);
}

3.彩票选号码

void stream3(){
    // 32选6
    Random r = new Random();
    for (int i = 0; i < 6; i++) {
        System.out.println(r.nextInt(32));
    }
    // 改造
    List<Integer> result = Stream.generate(() -> new Random().nextInt(32)).limit(6)
            .collect(Collectors.toList());
    System.out.println(result);
}

4.流的部分操作

@Test
void stream4(){
   List<UserBean> userList = new ArrayList<>();
   //...... 初始化一些user数据
    //找到年龄最小的
    userList.parallelStream().min(Comparator.comparing(UserBean::getAge)).get();
    //找到年龄最大的
    userList.parallelStream().max(Comparator.comparing(UserBean::getAge)).get();
    //按照年龄由小到大排队.排序不能 parallel
    userList.stream().sorted(Comparator.comparing(UserBean::getAge)).collect(Collectors.toList());
    //按照年龄由大到小排队.排序不能 parallel
    userList.stream().sorted(Comparator.comparing(UserBean::getAge).reversed()).collect(Collectors.toList());
    //按照性别统计人数,key是性别,value是人数
    Map<String, Long> result = userList.parallelStream().collect(Collectors.groupingBy(UserBean::getSex, Collectors.counting()));
    //按照性别分别找到年级最大的
    Map<String, UserBean> collect = userList.parallelStream()
            .collect(Collectors.toMap(UserBean::getSex, Function.identity(), BinaryOperator.maxBy(Comparator.comparing(UserBean::getAge))));
    //取所有18岁以上男性的年龄之和
    userList.parallelStream().map(UserBean::getAge).filter(e->e>18).reduce((a,b)->a+b).get();

    List<UserBean> userList2 = new ArrayList<>();
    //...... 初始化一些user2数据.可能是其他来源
    // 数组流合并
    List<UserBean> finalList = Arrays.asList(userList, userList2).parallelStream().flatMap(Collection::parallelStream).collect(Collectors.toList());
    // build模式创建流
    Stream.builder().add(new UserBean()).add(new UserBean()).build();
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值