我有一个已按对象类型分组的对象列表(已排序)。
List<Object> myList = new ArrayList();
myList.add(new Integer());
myList.add(new Integer());
myList.add("string");
myList.add(new Double());
myList.add(new Double());
myList.add(new Double());
如何在不使用 instanceof 运算符的情况下优雅地遍历对象组?
我基本上想要这个:
List<List<Object>> result;
我不知道有哪些对象类型,所以简单的方法就是这样循环:
Object obj = iter.next();
String thisClass = obj.class.getSimpleName();
if (!thisClass.equals(lastClass)){
currentList = new ArrayList();
}
currentList.add(obj);
然而,也许一个流会很好,比如:
myList.stream().collect(Collectors.groupingBy(Class::getSimpleName, Collectors.<IBaseDO>toList()));
是的,这会导致编译错误,因为我无法正确理解语法。
想法?
答案 0 :(得分:2)
这是一个非常糟糕的设计。
然而,你可以这样做:
List<List<Object>> grouped =
myList.stream()
.collect(collectingAndThen(
groupingBy(Object::getClass, LinkedHashMap::new, toList()),
map -> new ArrayList<>(map.values)
));