Java排序动态定义的对象数组列表
我想整理一下Java排序动态定义的对象数组列表,java,list,sorting,arraylist,collections,Java,List,Sorting,Arraylist,Collections,我想整理一下 LG Electronics 1.jpg Apple 2.JPG Apple 3.JPG 作为 这是我的密码 //行是二维的 ArrayList<String[]> rows = new ArrayList<>(); for(int i=0;i<images.length;i++){ com.drew.metadata.Metadata metadata = ImageMetadataReader.readMetadat
LG Electronics 1.jpg
Apple 2.JPG
Apple 3.JPG
作为
这是我的密码
//行是二维的
ArrayList<String[]> rows = new ArrayList<>();
for(int i=0;i<images.length;i++){
com.drew.metadata.Metadata metadata = ImageMetadataReader.readMetadata(images[i]);
for (com.drew.metadata.Directory directory : metadata.getDirectories()) {
for (Tag tag : directory.getTags()) {
//System.out.println(tag.toString());
if(tag.toString().contains("[Exif IFD0] Make")){
rows.add(new String[]{tag.getDescription(),images[i].toString()});
}
}
}
}
但它也不适合我。我遇到了这样一个错误,没有找到合适的排序方法(arraylist),我建议不要在您的案例中使用类似于
arraylist rows
的模型,因为它实际上并不能说明列表中包含的内容,这使得实现比较变得笨拙
相反,您可以将元数据建模为Java类:
public class Metadata {
private final String description;
private final String imageName;
public Metadata(String description, String imageName) {
this.description = description;
this.imageName = imageName;
}
public String getDescription() {return description;}
public String getImageName() {return imageName;}
@Override
public String toString() {
return description + " " + imageName;
}
}
现在,您可以拥有一个List rows=new ArrayList();
,您只需更改此部分即可在循环中填充它:
rows.add(new String[]{tag.getDescription(),images[i].toString()});
进入这个
rows.add(new Metadata(tag.getDescription(), images[i].toString());
最后,您可以使用适当的比较器进行排序
Collections.sort(rows, Comparator
.comparing(Metadata::getDescription)
.thenComparing(Metadata::getImageName));
我建议不要在您的案例中使用诸如arraylistrows
之类的模型,因为它实际上并不能说明列表中包含的内容,而且会使实现比较变得笨拙
相反,您可以将元数据建模为Java类:
public class Metadata {
private final String description;
private final String imageName;
public Metadata(String description, String imageName) {
this.description = description;
this.imageName = imageName;
}
public String getDescription() {return description;}
public String getImageName() {return imageName;}
@Override
public String toString() {
return description + " " + imageName;
}
}
现在,您可以拥有一个List rows=new ArrayList();
,您只需更改此部分即可在循环中填充它:
rows.add(new String[]{tag.getDescription(),images[i].toString()});
进入这个
rows.add(new Metadata(tag.getDescription(), images[i].toString());
最后,您可以使用适当的比较器进行排序
Collections.sort(rows, Comparator
.comparing(Metadata::getDescription)
.thenComparing(Metadata::getImageName));
行是一个列表,所以它的元素是String[].所以,要比较它们,你需要一个比较器。你能帮我做到这一点吗?我真的被困在实现所有东西上了。似乎没有任何东西对我有效..检查这个链接它提到了Josh Bloch的《有效Java》一书中的一个项目…他明确提到永远不要将泛型与数组混合。这是第一件事…一般来说Josh建议尽量保持精简gs在编程中很简单,然后解决方案也会很简单……行是一个列表,所以它的元素是String[].所以,要比较它们,你需要一个比较器。你能帮我做到这一点吗?我真的被困在实现所有东西上了。似乎没有任何东西对我有效..检查这个链接它提到了Josh Bloch的《有效Java》一书中的一个项目…他明确提到永远不要将泛型与数组混合。这是第一件事…一般来说Josh建议尽量保持精简编程简单,然后解决方案也会简单…很乐意提供帮助。如果你认为这回答了你的问题,你也可以选择接受答案。现在,如果我想在排序后获得原始值,比如:Apple 2.JPG Apple 3.JPG LG Electronics 1.JPG Now当我在排序后打印行我得到的只是像排序这样的输出。Data@387f0054`如何获取特定值,如imageName
我修改了Metadata
类,以包含一个toString()
实现,该实现应该能够解决问题(并且可以根据需要进行更改)。我想你可以在UI中的某个地方勾选一个复选框来接受答案。完成兄弟,这真的很有帮助…我被困在这里,但我想感谢你乐于帮助。如果你认为这回答了你的问题,你也可以选择接受答案。现在,如果我想在排序后获得原始值,比如:Apple 2.JPG,该怎么办苹果3.JPG LG Electronics 1.JPG现在当我在排序后打印行
时,我得到的是类似“排序”的输出。Data@387f0054`我怎样才能获得像imageName
这样的特定值?我修改了Metadata
类,以包含一个toString()
实现,该实现应该解决这个问题(你可以随意更改)。我想你可以在UI中的某个地方勾选一个复选框来接受答案。完成了,兄弟,这真的很有帮助…我被困在这里,但我想感谢你