1、普通的sorted排序(按照数值正序排序,从小到大)
List<Integer> integers = new ArrayList<>();
integers.stream().sorted().collect(Collectors.toList());
2、实体类的sorted排序(先根据课程名称排序,如果课程名称一样,再根据课程码排序)
courseModels.stream().sorted(
Comparator.comparing(CourseModel::getName).thenComparing(CourseModel::getCode))
.collect(Collectors.toList());
3、复杂的排序(集合中包含集合,先通过子集合的第一个元素排序,相同时再根据其他属性排序)
//按照学期正序,当同一学期有多门课程时,按课程编码排序
public List<CourseModel> sort(List<CourseModel> courseModels){
if (CollectionAide.isEmpty(courseModels)) {
new ArrayList<>();
}
courseModels = courseModels.stream().sorted((c1, c2) -> {
Integer c1Term = c1.getCourseTerms().get(0).getTerm();
Integer c2Term = c2.getCourseTerms().get(0).getTerm();
if (c1Term.equals(c2Term)) {
return c1.getCode().compareTo(c2.getCode());
}
if (c1Term < c2Term) {
return -1;
}
return 1;
}).collect(toList());
return courseModels;
}
4、将集合通过指定key,value转换为map
List.stream().collect(Collectors.toMap(User::getId, User::getName));
//id为key,name为value
5、stream求平均值
double average1 = doubleList.stream().collect(Collectors.averagingDouble(Double::doubleValue));
System.out.println("平均值:" + average1);
list.stream().mapToDouble(User::getAge).average().getAsDouble();
6、stream求最大值、和
//求和
answerModelList.stream().mapToDouble(model -> model.getUserScore() == null ? 0.0 : model.getUserScore()).sum()
//最大值
answerModelList.stream().mapToLong(model -> model.getSubmitTime()).max().getAsLong();
7、allMatch、anyMatch、noneMatch
public static void main(String[] args) {
List<Integer> list = Arrays.asList(1, 2, 1, 1, 1);
boolean anyMatch = list.stream().anyMatch(f -> f == (1));
boolean allMatch = list.stream().allMatch(f -> f == (1));
boolean noneMatch = list.stream().noneMatch(f -> f == (1));
long count = list.stream().filter(f -> f == (1)).count();
System.out.println(anyMatch); // true
System.out.println(allMatch); // false
System.out.println(noneMatch); // false
System.out.println(count); // 4
}
// anyMatch任何一个元素满足判断条件返回true
// allMatch所有元素满足判断条件返回true
// noneMatch没有一个元素满足判断条件返回true
8、stream流的累加器
// 从0开始累加
stream.reduce(BigDecimal.ZERO, BigDecimal::add));