根据List

时间:2016-08-11 10:58:53

标签: java collections

我在ArrayList中有以下对象,此对象中的值显示为开头的数字,即Id的某些内容。

enter image description here

我需要创建一个Map对象,其对象应该是对象的id,其值应该是具有id的对象。在一天结束时,我希望有一个这样的地图。

enter image description here

我已经用两个for循环和很多if语句解决了这个问题,但对我来说这似乎很难看。

任何清洁解决方案都将不胜感激。

2 个答案:

答案 0 :(得分:3)

Map<Integer, List<Foo>> result = list.stream().collect(Collectors.groupingBy(Foo::getId));

答案 1 :(得分:0)

编辑以适应问题编辑,它就像这样简单:

ArrayList<Element> list = ...;
HashMap<Integer, List<Element>> map = new HashMap<Integer, List<Element>>();

for(Element e : list) {
    ArrayList<Element> auxList;
    if(map.contains(e.getId()) {
        auxList = map.get(e.getId());
    } else {
        auxList = new ArrayList<Element>();
        map.put(e.getId(), auxList);
    }
    auxList.add(e);
}

只需遍历起始列表并将元素添加到地图中。如果地图已包含ID,请将其添加到列表中。如果没有,请创建一个新列表。