[英]Java sorting dynamically defined arraylist of objects
我想排序
LG Electronics 1.jpg
Apple 2.JPG
Apple 3.JPG
如
Apple 2.JPG
Apple 3.JPG
LG Electronics 1.jpg
這是我的代碼//行是2d
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()});
}
}
}
}
我已經實現了Collections.sort(rows);
但對我沒有任何作用。 我什至試過
Collections.sort(rows, new Comparator<ArrayList<String>>() {
@Override
public int compare(ArrayList<String> o1, ArrayList<String> o2) {
return o1.get(0).compareTo(o2.get(0));
}
});
但這對我也不起作用。 我收到此錯誤,找不到適合於sort(arraylist
我建議不要在您的情況下使用諸如ArrayList<String[]> 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<Metadata> rows = new ArrayList<>();
您在循環內填充的內容僅更改了此部分:
rows.add(new String[]{tag.getDescription(),images[i].toString()});
進入這個
rows.add(new Metadata(tag.getDescription(), images[i].toString());
最后,您可以使用適當的Comparator
進行排序
Collections.sort(rows, Comparator
.comparing(Metadata::getDescription)
.thenComparing(Metadata::getImageName));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.