Java 如何将列表拆分为子列表
不幸的是,我使用的是Java7,所以我不能使用Java8的任何功能 我有以下枚举:Java 如何将列表拆分为子列表,java,list,Java,List,不幸的是,我使用的是Java7,所以我不能使用Java8的任何功能 我有以下枚举: public enum Type { MAILING, RESEPT, CURRENT, //... USER } 以及该类型的类容器: public class Container { public Type getType() { // Impl } } 现在我有一些列表。如何将其拆分为列表,以便列表中的任何列表只包含具有相同
public enum Type
{
MAILING,
RESEPT,
CURRENT,
//...
USER
}
以及该类型的类容器:
public class Container
{
public Type getType()
{
// Impl
}
}
现在我有一些
列表
。如何将其拆分为列表
,以便列表
中的任何列表
只包含具有相同getType()
的容器
如果您有Java8,则可以使用流
-API的收集器。groupingBy(…)
。然后返回一个映射。然后您可以循环映射的值并将其放入列表中。如果您有Java 8,您可以使用流
-API的收集器。groupingBy(…)
。然后返回一个映射。然后,您可以循环映射的值并将其放入列表中。对于Java 7,我建议循环遍历枚举values()
List completeList=new ArrayList();
List splitList=new ArrayList();
对于(类型:Type.values()){
List containerTypeList=新建ArrayList();
for(容器c:completeList){
if(c.getType().equals(type)){
containerTypeList.add(c);
}
}
添加(containerTypeList);
}
对于Java 7,我建议循环遍历枚举值()
List completeList=new ArrayList();
List splitList=new ArrayList();
对于(类型:Type.values()){
List containerTypeList=新建ArrayList();
for(容器c:completeList){
if(c.getType().equals(type)){
containerTypeList.add(c);
}
}
添加(containerTypeList);
}
这里有一个稍微不同的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());
List containers=new ArrayList();
容器。添加(/*…*/);
容器。添加(/*…*/);
容器。添加(/*…*/);
容器。添加(/*…*/);
容器。添加(/*…*/);
容器。添加(/*…*/);
Map split=newhashmap();
用于(容器:容器){
如果(!split.containsKey(container.getType())){
split.put(container.getType(),newArrayList());
}
split.get(container.getType()).add(container);
}
List listOfLists=新的ArrayList(split.values());
这里有一个稍微不同的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());
List containers=new ArrayList();
容器。添加(/*…*/);
容器。添加(/*…*/);
容器。添加(/*…*/);
容器。添加(/*…*/);
容器。添加(/*…*/);
容器。添加(/*…*/);
Map split=newhashmap();
用于(容器:容器){
如果(!split.containsKey(container.getType())){
split.put(container.getType(),newArrayList());
}
split.get(container.getType()).add(container);
}
List listOfLists=新的ArrayList(split.values());
很抱歉,我没有指定这些重要信息。我仍然在使用Java 7。我很抱歉没有指定那些重要的信息。我仍然在Java 7中,是否有一些Java注意,Map不包含contains方法。您可能是指containsKey()。谢谢,已更新。我并没有实际测试这个:-)@St.Antario只是一个注释-如果你使用的是番石榴(也许,从你对另一个答案的评论来看),你可以使用一个多重映射,它去掉了一些样板代码。一个注释是,Map不包含contains方法。您可能是指containsKey()。谢谢,已更新。我并没有实际测试:-)@St.Antario只是一个注释-如果你使用的是番石榴(也许,从你对另一个答案的评论来看),你可以使用一个多重映射,它去掉了一些样板代码。