lambda表达式分组、过滤、排序、转map、求和、求最值

19 篇文章 1 订阅
10 篇文章 0 订阅

在jdk1.8中lambda表达式提供了集合的一些很实用的操作方法,函数式编程既减少了很多繁杂的foreach代码,又简洁明了,通俗易懂。

  1. @Data

  2. public class User {

  3. private String userId;

  4. private String username;

  5. private String nickName;

  6. private String password;

  7. private String picPath;

  8. private String status;

  9. private String sessionId;

  10.   private Date createTime;

  11.   private Date updateTime;

  12.   private int age;

  13.   private BigDecimal memberNum;

  14. @Override

  15. public String toString() {

  16. return "User [userId=" + userId + ", username=" + username

  17. + ", nickName=" + nickName + ", password=" + password

  18. + ", picPath=" + picPath + ", status=" + status

  19. + ", sessionId=" + sessionId + ", createTime=" + createTime

  20.   + ", updateTime=" + updateTime + ", age=" + age + "]";

  21. }

  22. }

在创建上述对象的前提下(List<User> userList不为空):

1、通过指定字段分组Collectors.groupingBy().

Map<String, List<User>> groupByStatus = userList.stream().collect(Collectors.groupingBy(User::getStatus));

for (Map.Entry<String, List<User>> entry : groupByStatus.entrySet()) {
            String status = entry.getKey();
            List<User> userList = entry.getValue();

}

2、通过条件过滤filter().

List<User> userListByStatus = userList.stream().filter(t -> t.getStatus().equals("100")).collect(Collectors.toList());

3、获取list某个字段组装新list.

List<Long> userIdList = userList.stream().map(t -> t.getUserId()).collect(Collectors.toList());

4、去重distinct().

List<Long> userIdList = userList.stream().distinct().collect(Collectors.toList());

5、单字段多字段排序sort().

userList.sort(Comparator.comparing(User::getUserId));

userList.sort(Comparator.comparing(User::getUserId).thenComparing(User::getStatus));

{

注:若选择排序字段为null值,正序可userList.sort(Comparator.comparing(User::getUserId,Comparator.nullsFirst(Comparator.naturalOrder())))

}

6、list转map.

Map<Long, User> userMap = userList.stream().collect(Collectors.toMap(User::getUserId, t -> t,(k1,k2)->k1));

(其中,若集合对象key有重,可根据(k1,k2)->k1设置<保留k1,舍弃k2>.)

7、求和

基本类型:int sumAge = userList.stream().mapToInt(User::getAge).sum();

其他:BigDecimal totalMemberNum = userList.stream().map(User::getMemberNum).reduce(BigDecimal.ZERO, BigDecimal::add);

(其中,若bigDecimal对象为null,可filter()过滤掉空指针.)

8、最值

Date minDate = userList.stream().map(User::getCreateTime).min(Date::compareTo).get();

Date maxDate = userList.stream().map(User::getCreateTime).max(Date::compareTo).get();

User maxUp = userList.stream().max(Comparator.comparingInt(User::getAge)).get();

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值