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(paring(Student::getAge)).collect(Collectors.toList());
按照学生年龄与班级排序(多条件排序)
List<Student> students = studentList.stream().sorted(paring(Student::getAge).thenComparing(Student::getClassNo)).collect(Collectors.toList());
按照学生年降序排序(reversed)
List<Student> students = studentList.stream().sorted(paring(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));
2、MapReduce基础模型
MapReduce是一种计算模型,它将大型数据操作作业分解为可以跨服务器集群并行执行的单个任务。每个MapReduce工作由两个阶段组成:Map;Reduce。
Map处理数据
Reduce分析数据