Java List<Object>分组转成List<List<Object>> 中报 java.util.HashMap$Values cannot be cast to java.util.List

        遇到一个集合转换的问题,要求是在 MyBatis 文件中使用双重 foreach 生成条件,然后在外面就需要在原来的 List<Object> 里再套一个List,但是Java代码中用Java8给List 分组得到的是 Map<String, List<Object>> 的集合,虽然可以强转成 List<List<Object>> ,但是运行后回报错,也可以是 Collection<List<Object>>类型,但是这个对象的类型还不是想要 List<List<Object>> 这种,说了这么多可能大家晕了,来上代码吧。

错误示例:

List<People> list = new ArrayList<>();
List<List<People>> coll = List<List<People>> list.stream.filter(sex -> "man".equals(sex.getSex))).
collect(Collectors.groupingBy(People::getAge, Collectors.toList())).values();

List<People> nonList = List<List<People>> list.stream.filter(sex -> "woman".equals(sex.getSex))).
collect(Collectors.toList());

这种强制类型转换会报下面的错误

java.util.HashMap$Values cannot be cast to java.util.List

正确示例:

List<People> list = new ArrayList<>();
Collection<List<People>> coll = list.stream.filter(sex -> "man".equals(sex.getSex))).
    collect(Collectors.groupingBy(People::getAge, Collectors.toList())).values();

List<People> nonList = List<List<People>> list.stream.filter(sex -> "woman".equals(sex.getSex))).
collect(Collectors.toList());

这种方式虽然不会报错,但是数据结构依然不是想要的,最后需要再做一步就可以了。

new ArrayList<>(coll);

这样就能实现 List<List<Object>> 类型的数据结构了。

下一篇讲 MyBatis 种使用双重 foreach 。

MyBatis 里使用双重 foreach 标签

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值