简要介绍一下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