按对象类型过滤List对象

时间:2016-02-22 18:15:49

标签: java arraylist java-stream

我有一个已按对象类型分组的对象列表(已排序)。

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()));

是的,这会导致编译错误,因为我无法正确理解语法。

想法?

1 个答案:

答案 0 :(得分:2)

这是一个非常糟糕的设计。

然而,你可以这样做:

List<List<Object>> grouped = 
    myList.stream()
          .collect(collectingAndThen(
                       groupingBy(Object::getClass, LinkedHashMap::new, toList()), 
                       map -> new ArrayList<>(map.values)
          ));