java基础-jdk1.8-lambda表达式-stream

本文介绍了Java集合框架中Stream API的使用,包括如何遍历列表、删除元素、进行单字段及多字段排序、分组以及计算。详细展示了不同排序方式,如升序、降序,以及如何实现两个字段的分组。此外,还涵盖了求和、去重等操作,提供了多种去重策略,适用于实际开发中的数据处理需求。
摘要由CSDN通过智能技术生成

一、List<对象>-stream

​List<User> list = new ArrayList<>();

基础的一些使用

//遍历
list.forEach(x-> System.out.println(x.getId()+"-"+x.getName()));
//删除符合条件的元素
list.removeIf(e -> Objects.isNull(e));

1、排序:

一个字段排:

//list自己本身的顺序发生了改变
//【升序】
list.sort(Comparator.comparing(User::getId));
//【降序】
list.sort(Comparator.comparing(User::getId).reversed());


//list自己本身的顺序不发生改变
list.stream().sorted(
      Comparator.comparing(User::getId, Comparator.naturalOrder()).reversed())
      .forEach(System.out::println);

两个字段排序:

//bya为第一个排序字段,升序    这个id相同时走第二个排序
Comparator<User> id= Comparator.comparing(User::getId);
//bya为第二个排序字段,降序.reversed()
Comparator<User> age= Comparator.comparing(User::getAge).reversed();
Collections.sort(list,id.thenComparing(age));



//自然比较器
//Comparator.naturalOrder()
//Comparator.nullsLast()  null排在最后面
//Comparator.nullsFirst()  null排在最前面
list.sort(
    Comparator.comparing(User::getAge,
        Comparator.nullsLast(Integer::compareTo))
            .thenComparing(User::getUserName,
                                Comparator.nullsFirst(String::compareTo))

2、分组:

一个字段分组:

Map<String, List<User>> userGroupList=
           list.stream().collect(Collectors.groupingBy(User::getUserName));

两个字段分组-一起:

Map<String, List<User>> voMap = 
                list.stream().collect(Collectors.groupingBy(
                a -> com.pcitc.kpi.utilis.util.StringUtils.format("{0}{1}",
                a.getOrgCode(), a.getUserName())));

Map<String, Integer> groupOrderNumMap =
                    list.stream().collect(HashMap::new,
                            (m, v) -> m.put(v.getOrgCode(), v.getUserName()),
                                HashMap::putAll);

两个字段分组-先后:

//先按年龄分组、再按性别分组
Map<Integer, Map<String, Map<Integer, List<User>>>> userMap =
        list.collect(Collectors.groupingBy(
                UserD::getAge, Collectors.groupingBy(
                        User::getSex, Collectors.groupingBy((userDTO) -> {
                            if (userDTO.getSex().equals("男")) {
                                return 1;
                            } else {
                                return 0;
                            }
                        }))));

3、计算

//求和  
list.stream().map(User::getMoney).reduce(BigDecimal.ZERO,BigDecimal::add);

4、去重

一个字段去重:

// 根据name去重
list.stream().collect(
    Collectors.collectingAndThen(
            Collectors.toCollection(() -> 
new TreeSet<>(Comparator.comparing(User::getName))), ArrayList::new));
System.out.println("name去重后:"+collect.toString());

两个字段去重:

list.stream().collect(
    collectingAndThen(toCollection(() -> ’
        new TreeSet<>(Comparator.comparing(o -> o.getName() + ";" 
                                          + o.getClassName() + ";" 
                                          + o.getSex()))), ArrayList::new));
System.out.println("多条件去重后:"+collect1.toString());

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值