关于java8中stream流的使用

1 篇文章 0 订阅
本文详细介绍了Java Stream API的使用,包括普通排序、实体类排序、复杂排序策略,以及如何将集合转换为Map、计算平均值、求最大值和、检查元素匹配以及实现累加器。示例展示了如何灵活运用Stream API进行数据处理和操作,提高代码效率。
摘要由CSDN通过智能技术生成

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));

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值