JDK1.8-Stream()流常用方法笔记

一:List通过Stream转Map

Collectors.toMap(Map的key, Map的value)

出现重复key时会报错

解决方法:

Collectors.toMap(Map的key, Map的value, 出现重复值时取前面或后面的值)

1、List对象转Map

Map<String,String> result = datadictList.stream().collect(Collectors.toMap(UserInfo::getCode, UserInfo::getName, (key1, key2) -> key1));

2、List非对象转Map

//指定字段为key和value
Map<String, String> collect1 = maps.stream().collect(Collectors.toMap(item -> String.valueOf(item.get("code")), item -> String.valueOf(item.get("name")), (i1, i2) -> i1));
//指定字段为key
Map<String, String> collect1 = maps.stream().collect(Collectors.toMap(item -> String.valueOf(item.get("code")), item -> item, (i1, i2) -> i1));

二:List通过Stream分组

1、List对象分组

Map<String, List<UserInfo>> collect = list.stream().collect(Collectors.groupingBy(UserInfo::getCode));

2、List非对象分组

Map<String, List<Map>> collect = list.stream().collect(Collectors.groupingBy(e -> e.get("code").toString()));

3、List对象分组(转成有序Map)

TreeMap<String, List<UserInfo>> collect2 = list.stream().filter(a -> null != a).collect(Collectors.groupingBy(UserInfo::getCode, TreeMap::new, Collectors.toList()));

三:List通过Stream过滤

1、过滤掉对象不为空并且某个指定值不为空的数据

List<UserInfo>  userList= list.stream().filter(a ->
        null != a
                && StringUtils.isNotBlank(a.getCode())
                && StringUtils.isNotBlank(a.getName())
).collect(Collectors.toList());

四:List通过Stream汇总某个数据

1、汇总金额

BigDecimal totalScale = list.stream().map(UserInfo::getAmt).map(BigDecimal::new).reduce(BigDecimal.ZERO, BigDecimal::add);

五:List通过Stream排序

.reversed()为降序,不加.reversed()为升序

1、List对象排序

List<UserInfo> list = infoList.stream().sorted(Comparator.comparing(UserInfo::getAge).reversed()).collect(Collectors.toList());

 2、List非对象排序

value = value.stream().sorted(Comparator.comparing(
        item -> (null == item || null == item.get("age") || "".equals(item.get("age"))) ? -1 : Integer.valueOf(item.get("age").toString())
)).collect(Collectors.toList());

2、List动态字段排序排序

sortordName - 排序字段名

sortordType -排序方式 0:升序  1:降序

list.stream().sorted((x, y) -> {
                        if (x.containsKey(sortordName) && y.containsKey(sortordName)) {
                            String value = x.getString(sortordName);
                            String value1 = y.getString(sortordName);

                            if (YssD.isNumber(value)) {
                                double valueX = Double.valueOf(value);
                                double valueY = Double.valueOf(value1);
                                if ("0".equals(sortordType)) {
                                    return Double.compare(valueX,valueY);
                                } else {
                                    return Double.compare(valueY,valueX);
                                }
                            } else  {
                                if ("0".equals(sortordType)) {
                                    return value.compareTo(value1);
                                } else {
                                    return  value1.compareTo(value);
                                }
                            }
                        }
                        return 0;

                    }).collect(Collectors.toList());

六:List通过Stream获取最大值最小值

1、获取最大值

max = list.stream().max(Comparator.comparing(UserInfo::getAge));

2、获取最小值

min = list.stream().min (Comparator.comparing(UserInfo::getAge));

七:List通过Stream通过下标截取数据

1、根据页数和每页数量截取当页数据

pageNum -每页多少条数据

pageSize -当前第几页

.skip - 从第几条数据开始

.limit - 到第几条数据结束

List<UserInfo> rowPage = rows.stream().skip((pageNum - 1) * pageSize).limit(pageSize).collect(Collectors.toList());

八:List通过Stream进行循环处理

1、需要返回值

List<JSONObject> collect = list.stream().filter(a -> null != a).map(obj -> {
                obj .put("custName", "");
                obj .put("custId", "");
                return obj ;
            }).collect(Collectors.toList());

2、不需要返回值

List<JSONObject> list1 = new ArrayList<>();
list.stream().forEach(item -> {
            if(null != item.getAge){
                list1.add(item );
            }
            
 });

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值