遇到一个集合转换的问题,要求是在 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 。