不幸的是,我在Java 7中,所以我不能使用任何Java 8的设施。
我有以下枚举:
public enum Type
{
MAILING,
RESEPT,
CURRENT,
//...
USER
}
和该类型的类容器:
public class Container
{
public Type getType()
{
// Impl
}
}
现在我有一些List<Container>
。如何将其拆分为List<List<Container>>
,以使List<Container>
中的任何List<List<Container>>
仅包含Container
getType()
个{{1}}。
答案 0 :(得分:3)
如果您使用的是Java 8,则可以使用Stream
- API的Collectors.groupingBy(...)
。然后你得到Map<Type, List<Container>>
返回。然后你可以循环遍历地图的值并将其放入列表中。
答案 1 :(得分:2)
对于Java 7,我建议循环使用枚举values()
。
List<Container> completeList = new ArrayList<>();
List<List<Container>> splitList = new ArrayList<>();
for (Type type : Type.values()) {
List<Container> containerTypeList = new ArrayList<>();
for (Container c : completeList) {
if (c.getType().equals(type)) {
containerTypeList.add(c);
}
}
splitList.add(containerTypeList);
}
答案 2 :(得分:2)
这是一种略有不同的Java 7方法:
List<Container> containers = new ArrayList<>();
containers.add(/* ... */);
containers.add(/* ... */);
containers.add(/* ... */);
containers.add(/* ... */);
containers.add(/* ... */);
containers.add(/* ... */);
Map<Type, List<Container>> split = new HashMap<>();
for (Container container : containers) {
if (!split.containsKey(container.getType())) {
split.put(container.getType(), new ArrayList<Container>());
}
split.get(container.getType()).add(container);
}
List<List<Container>> listOfLists = new ArrayList<>(split.values());