java8中stream流集合的筛选,规约,分组,聚合

简要介绍一下stream

Stream 将要处理的元素集合看作一种流,在流过程中,借助stream api对流中的元素进行操作,比如筛选,排序,聚合等。

创建Stream

List<String> strList = Arrays.asList("a","b","c");

// 创建顺序流
Stream<String> sequenceStream = strList.stream();
sequenceStream.forEach(System.out::println);
log.info("显示效果:");
// a
// b
// c

// 创建并行流
Stream<String> parallelStream = strList.parallelStream();
parallelStream.forEach(System.out::println);

筛选

需求:取出年龄大于10

List<Integer> list = Arrays.asList(6,7,10,19);
Stream<Integer> stream = list.stream();
stream.filter(x -> x>7).forEach(System.out::println);
// 10
// 19

聚合

需求:获取年薪在8w以上用户信息

List<Person> personList = new ArrayList<>();
personList.add(Person.builder().name("Tom").age(10).salary(100000).area("河南").build();
personList.add(Person.builder().name("Jack").age(11).salary(20000).area("广东").build();
personList.add(Person.builder().name("Rose").age(12).salary(10000).area("上海").build();
List<Person) result = personList.stream().filter(item -> item.getSalary() > 80000).collect(Collectors.toList);

需求:获取字符串集合中最长的元素

List<String> strNameList = Arrays.asList("Jack","Rose","Jimss");
Optional<String> maxStr = strNameList.stream().max(Comparator.comparing(String::length));
log.info("获取字符串集合中最长元素:[{}]",maxStr.get());

需求:获取最大值

List<Integer> list = Arrays.asList(7,6,9,4.11,6);
Optional<Integer> max = list.stream().max(Integer::compareTo);
log.info("自然排序最大值:[{}]",max.get()); // 11
Optional<Integer> maxAnother = list.stream().max((o1,o2) -> o2-o1);
log.info("自定义排序:[{}]",maxAnother.get()); // 4

需求:员工薪资最大值

List<Person> personList = new ArrayList<>();
personList.add(Person.builder().name("Tom").age(10).salary(100000).area("河南").build();
personList.add(Person.builder().name("Jack").age(11).salary(20000).area("广东").build();
personList.add(Person.builder().name("Rose").age(12).salary(10000).area("上海").build();
Optional<person> max = personList.stream().max(Comparator.comparingInt(Person::getSalary));
log
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值