当前位置:   article > 正文

Java8-Stream数据流(分页、筛选、排序、分组、求和)_stream分页

stream分页

1、Stream基础操作

一个 Stream 只可以使用一次;
stream has already been operated upon or closed,只能使用一次

功能:

(1)分页与基础操作;

  List<String> queue = new LinkedList<>();
  Collections.addAll(queue,"1","2","gy","hr","PIGE","ge","goole");
   //获得Stream接口对象
  Stream<String> stream = queue.stream();
   //输出元素个数
   //stream has already been operated upon or closed,只能使用一次
   //System.out.println(stream.count());
   //1、内容全部转小写,筛选是否包含字母g的集合
   //List<String> list = stream.filter(e -> e.toLowerCase(Locale.ROOT).contains("g")).collect(Collectors.toList());
   //2、分页:跳过两个skip(2),取一个limit(1);
   List<String> list = stream.filter(e -> e.toLowerCase(Locale.ROOT).contains("g")).skip(2).limit(1).collect(Collectors.toList());
   System.out.println(list); //[ge]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

(2)筛选

  • 选择二班的男生(多条件筛选)
List<Student> students = studentList.stream().filter(s -> (s.getSex() == 0 && s.getClassNo() == 2)).collect(Collectors.toList());
  • 1

(3)排序

  • 按照学生年龄升序排序(单条件排序)
List<Student> students =  studentList.stream().sorted(Comparator.comparing(Student::getAge)).collect(Collectors.toList());
  • 1
  • 按照学生年龄与班级排序(多条件排序)
List<Student> students = studentList.stream().sorted(Comparator.comparing(Student::getAge).thenComparing(Student::getClassNo)).collect(Collectors.toList());
  • 1
  • 按照学生年降序排序(reversed)
List<Student> students = studentList.stream().sorted(Comparator.comparing(Student::getAge).reversed()).collect(Collectors.toList());
  • 1

(4)分组

  • 按照班级分组
//按照班级进行分组
Map<Integer, List<Student>> classMap =  studentList.stream().collect(Collectors.groupingBy(Student::getClassNo));
 
 
结果是map:
key: 1 value:[{classNo:1,name:"张三",age:12},{classNo:1,name:"李四",age:13}]
key: 2 value:[{classNo:2,name:"王五",age:12},{classNo:1,name:"贼六",age:11}]
key: 3 value:[{classNo:3,name:"对七",age:12}]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

(5) 求和

  • 计算分数之和
BigDecimal score= studentList.setScore(studentList.stream().map(studentList::getScore).reduce(BigDecimal.ZERO, BigDecimal::add));
  • 1

(6) 去重

  • 单条件去重
    如果是字符串去重,可直接使用distinct()
// 使用Stream的distinct()方法进行去重操作
List<String> names = Arrays.asList("张三", "李四", "王五", "张三", "李四");
List<String> distinctNames = names.stream().distinct().collect(Collectors.toList());
  • 1
  • 2
  • 3
  • 按照对象多字段去重
    其中User为去重对象,userList为对象集合列表,getOrgName,getUserName二者为去重属性,更多个条件可以后面继续拼接,也可作为单独使用某个属性条件去重
 List<User> collect = userList.stream().collect(Collectors.collectingAndThen(
                        Collectors.toCollection(() -> new TreeSet<>(
                                Comparator.comparing(p -> p.getOrgName() + "," + p.getUserName()))), ArrayList::new));
  • 1
  • 2
  • 3

2、MapReduce基础模型

MapReduce是一种计算模型,它将大型数据操作作业分解为可以跨服务器集群并行执行的单个任务。每个MapReduce工作由两个阶段组成:Map;Reduce。

  • Map处理数据

  • Reduce分析数据

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号