我有一个MyObjects列表... MyObject {int id,String name}.现在我想将列表拆分为具有相同"id"值的子列表,任何人都可以建议这样做的有效方法.
Mar*_*iot 10
// create the thing to store the sub lists
Map<Integer, List<MyObject>> subs = new HashMap<Integer, List<MyObject>>();
// iterate through your objects
for(MyObject o : list){
// fetch the list for this object's id
List<MyObject> temp = subs.get(o.getId());
if(temp == null){
// if the list is null we haven't seen an
// object with this id before, so create
// a new list
temp = new ArrayList<MyObject>();
// and add it to the map
subs.put(o.getId(), temp);
}
// whether we got the list from the map
// or made a new one we need to add our
// object.
temp.add(o);
}
Run Code Online (Sandbox Code Playgroud)
使用番石榴:
ListMultimap<Integer, MyObject> myObjectsById = Multimaps.index(myObjects,
new Function<MyObject, Integer>() {
public Integer apply(MyObject myObject) {
return myObject.id;
}
});
Run Code Online (Sandbox Code Playgroud)
小智 8
如果您使用的是JDK 1.8,则可以使用以下优雅的解决方案:
Map<Integer, List<MyObject>> myObjectsPerId =
myObjects.stream().collect(Collectors.groupingBy(MyObject::getId));
Run Code Online (Sandbox Code Playgroud)