Java8 Stream Map列表,遍历、排序、分组等

Map列表转为Stream,遍历操作

怎么在java 8的map中使用stream

列表排序

  • 先按照按照时间戳,再按间隔排序
  • 方法一
                /*按照时间戳 间隔排序*/
                res=res.stream().sorted(new Comparator<Map>() {
                    @Override
                    public int compare(Map map1, Map map2) {
                        int time1=Integer.parseInt(String.valueOf(map1.get("DATE_TIMESTAMP")));
                        int time2=Integer.parseInt(String.valueOf(map1.get("DATE_TIMESTAMP")));
                        String bay1=String.valueOf(map1.get("BAYDESC"));
                        String bay2=String.valueOf(map1.get("BAYDESC"));
                        if(time1 == time2){
                            return StrUtil.compare(bay1,bay2,true);
                        }
                        return time1 - time2;
                    }
                }).collect(Collectors.toList());
  • 方法二
                    .sorted(Comparator.comparing(
                            (Map map) -> Double.parseDouble(map.get("TIME").toString())
                            ).reversed()

列表分组

  • 按照MAP中的 键值A 分组
  • 返回Map对象,每个key为A的不同值
  • 比如按值A分组有10个分组,那么返回的MAP就有10组key - value
        Map<String, Long> m1 = new HashMap<>();
        m1.put("A", 1l);
        m1.put("B", 100l);
        m1.put("C", 100l);

        Map<String, Long> m2 = new HashMap<>();
        m2.put("A", 10l);
        m2.put("B", 20l);
        m2.put("C", 100l);

        List<Map<String, Long>> beforeFormatting = new ArrayList<>();
        beforeFormatting.add(m1);
        beforeFormatting.add(m2);
        
//        按照MAP中的 键值A 分组
        Map<String, List<Map>> afterFormatting =
                beforeFormatting.stream()
                        .collect(groupingBy(
                                (Map map)->String.valueOf(map.get("A"))
                        ));

        System.out.println(afterFormatting); 
        // prints {1=[{A=1, B=100}], 10=[{A=10, B=20, C=100}]}

列表获取最大值对象、最小值对象、平均值

  • 分别获取到最大值、最小值的“size”的map
  • 获取列表数据的平均“TIME”值

//生成list
List<Map> list=Stream.of(1,23,45,78,111).map(x ->{

            return new HashMap(){
                {
                    put("size",x);
                }
            };
}).collect(Collectors.toList());
//求最大值对象 及其对应键值
Optional<Map> maxMap=list.stream()
                .collect(Collectors.maxBy(Comparator.comparing((map -> Integer.parseInt(String.valueOf(map.get("size")))))));

Map map=maxMap.get();
if(!map.isEmpty()){
   System.out.println(map.get("size"));
}

// 平均值
avg_time=data.stream()
.collect(Collectors.averagingDouble((Map map) -> Double.parseDouble(map.get("TIME").toString())));

参考链接

怎么在java 8的map中使用stream

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值