Java 给定一个项目列表(不同类型),如何将它们分开,以便每个组只包含相同类型的项目
给定一个不同类型项目的Java 给定一个项目列表(不同类型),如何将它们分开,以便每个组只包含相同类型的项目,java,algorithm,Java,Algorithm,给定一个不同类型项目的列表,我如何有效地将它们分开,使每组只包含相同类型的项目 更多详细信息 在java中,我有一个大约10000项的列表。共有10种不同的项目类型类型与值的属性相同。例如,List,则类型为Foo\getType() 我需要创建只包含一种项目类型的zip文件 请告诉我一些想法。代码是最受欢迎和赞赏的,甚至是伪代码。多谢各位 采纳Jon Skeet理念的公认代码 List<Foo> list = ...; ImmutableListMultimap<String
列表
,我如何有效地将它们分开,使每组只包含相同类型的项目
更多详细信息
在java中,我有一个大约10000项的列表。共有10种不同的项目类型类型与值的属性相同。例如,List
,则类型为Foo\getType()
我需要创建只包含一种项目类型的zip文件
请告诉我一些想法。代码是最受欢迎和赞赏的,甚至是伪代码。多谢各位
采纳Jon Skeet理念的公认代码
List<Foo> list = ...;
ImmutableListMultimap<String, Foo> grouped = MultiMaps.index(list,
new Function<Foo, String>() {
public String apply(Foo input) {
return input.getType();
}
});
for(String type : grouped.keySet()){
//The below list will contains items with the same type.
ImmutableList<Foo> fooListWithSameType = grouped.get(type);
String zipName = getZipName(type);
//Zip the list to a given file name
zipList(fooListWithSameType, zipName);
}
List=。。。;
ImmutableListMultimap分组=MultiMaps.index(列表,
新函数(){
公共字符串应用(Foo输入){
返回input.getType();
}
});
对于(字符串类型:grouped.keySet()){
//下面的列表将包含相同类型的项目。
ImmutableList WidgetSameType=grouped.get(类型);
字符串zipName=getZipName(类型);
//将列表压缩到给定的文件名
Ziplit(傻瓜与SameType,zipName);
}
您可以将的MultiMap
功能用于,因此使用Foo.getType()
示例,如果它返回字符串:
ImmutableListMultimap<String, Foo> grouped = MultiMaps.index(list,
new Function<Foo, String>() {
public String apply(Foo input) {
return input.getType();
}
});
ImmutableListMultimap分组=MultiMaps.index(列表,
新函数(){
公共字符串应用(Foo输入){
返回input.getType();
}
});
构建从类型到该类型的一组对象的映射。迭代列表并将每个对象添加到相应的bucket中
如果您想要一个使用更少内存的解决方案,您可以按类型对列表进行排序,将包含相同类型项的对象分组。Jon的回答将允许您按类型将它们排序到新的内存结构中,但是如果您只需要每种类型的zip文件,为什么不呢
Map<Type, ZipOutputStream> zips = ...;
for (Foo foo : list) {
zips.get(foo.getType())... // add the entry and write the content
}
Map-zips=。。。;
for(Foo-Foo:list){
zips.get(foo.getType())…//添加条目并写入内容
}
在类中键入,或在“值的某些属性”中键入?@Jon:Type是值的某些属性。像List
,那么类型是Foo#getType()
uhmmm。。。我喜欢这个。让我写一些代码。因此,您只需通过一次列表来构建映射zips
,然后再次通过第二次列表,将单个文件添加到正确的ZipOutputStream
。这很聪明,没错。您甚至可以将两个过程合并为一个过程,在遇到新类型时,将新的ZO懒洋洋地添加到地图中。然后你只需穿过并在完成后关闭它们。嗨,乔恩。我已经决定实施你的解决方案,但是我还不能测试它,因为我设计的系统需要一点时间来构建。因此,我环顾四周,编写了一些代码来展示我对ImmutableListMultimap
的理解。我把这些代码贴在我的原始问题上。乔恩,请你看一下,让我知道我的理解是否正确,好吗?多谢各位