@Data
@AllArgsConstructor
@NoArgsConstructor
class Student{
private Integer id;
private String num;
private String name;
private Date createTime;
private String subject;
private Integer score;
}
public void test(List<Student> students) {
//按num分组
Map<String, List<Student>> studentList = students.stream().collect(Collectors.groupingBy(Student::getNum));
//转map
Map<Integer, Student> collect4 = students.stream().collect(Collectors.toMap(Student::getId,x->x));
//转map去重
Map<String, Student> collect5 = students.stream().collect(Collectors.toMap(Student::getNum, x->x, (x, y)->x));
Map<String,Integer> scoreMap=new HashMap<>();
//遍历
studentList.forEach((k,v)->{
//求和
int sum = v.stream().mapToInt(Student::getScore).sum();
scoreMap.put(v.get(0).getName(),sum);
});
//Predicate表达式
Predicate<Student> predicate = u -> u.getScore().equals(100);
List<Student> collect6 = students.stream().filter(predicate).collect(Collectors.toList());
//取score 为一个列表
List<Integer> collect1 = students.stream().map(Student::getScore).collect(Collectors.toList());
//获取总数
long count = collect1.stream().count();
//获取第一个的值
Integer integer = collect1.stream().findFirst().get();
//按主键转int排序
List<Student> collect2 = students.stream().sorted(Comparator.comparing(x -> Integer.valueOf(x.getNum()))).collect(Collectors.toList());
//获取map对象中score的最大值
Map.Entry<String, Integer> stringIntegerEntry = scoreMap.entrySet().stream().max(Map.Entry.comparingByValue()).get();
//按createTime 逆序返回
List<Student> collect = students.stream().sorted(Comparator.comparing(Student::getCreateTime).reversed()).collect(Collectors.toList());
//按照id排序
List<Integer> ids = Arrays.asList(1,2,3,4);
students = students.stream().sorted((o1, o2) -> {
int index1 = ids.indexOf(o1.getId());
int index2 = ids.indexOf(o2.getId());
return index1 - index2;
}).collect(Collectors.toList());
//输出
collect.forEach(System.out::println);
//求和
Integer reduce = collect1.stream().reduce(Integer::sum).get();
//过滤
Stream<Student> studentStream = students.stream().filter(x -> x.getScore() > 60);
//是否含有匹配值
boolean bool = students.stream().allMatch(stu -> "语文".equals(stu.getSubject()));
//去重
List<Student> collect3 = students.stream().distinct().collect(Collectors.toList());
//求和去空,默认值
Integer sc = students.stream().map(x-> Objects.requireNonNullElse(x.getScore(), 0)).reduce(Integer::sum).get();
}
java8 stream常见流运用
于 2021-11-22 17:27:12 首次发布