我在ArrayList
中有以下对象,此对象中的值显示为开头的数字,即Id
的某些内容。
我需要创建一个Map
对象,其对象应该是对象的id,其值应该是具有id的对象。在一天结束时,我希望有一个这样的地图。
我已经用两个for循环和很多if
语句解决了这个问题,但对我来说这似乎很难看。
任何清洁解决方案都将不胜感激。
答案 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,请将其添加到列表中。如果没有,请创建一个新列表。