Java8-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]

(2)筛选

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

(3)排序

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

(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}]

(5) 求和

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

(6) 去重

  • 单条件去重
    如果是字符串去重,可直接使用distinct()
// 使用Stream的distinct()方法进行去重操作
List<String> names = Arrays.asList("张三", "李四", "王五", "张三", "李四");
List<String> distinctNames = names.stream().distinct().collect(Collectors.toList());
  • 按照对象多字段去重
    其中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));

2、MapReduce基础模型

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

  • Map处理数据

  • Reduce分析数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值