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();
}