关于java8中stream流的使用

1 篇文章 0 订阅

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值