java - Java 对动态定义的对象数组列表进行排序
问题描述
我想对此进行排序
LG Electronics 1.jpg
Apple 2.JPG
Apple 3.JPG
作为
Apple 2.JPG
Apple 3.JPG
LG Electronics 1.jpg
这是我的代码 //rows 是 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));
}
});
但这对我也不起作用。我收到了这个错误,找不到适合排序的方法(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));
推荐阅读
- kubernetes - Kubernetes 中 docker exec bash 的 kubectl 等价物是什么?
- javascript - 创建用户后重定向不起作用
- c++ - 为什么在 unique_ptr 中创建线程会使线程破坏?
- sql - 对于 col A 中的每个值,查找列 B 中大于它的值的数量
- c++ - 将 printf 与 C++ 迭代器一起使用
- wordpress - 从 http 更改为 https 后如何登录 Wordpress?
- spring - 春季启动,从 Keycloak 切换到自定义 Oauth2 提供程序给出错误
- python - 套索回归打破了 juypter 笔记本中的 python
- c# - 解析 C# 字典中的嵌套值
- sql - 在 WHERE 子句中使用多个嵌套 OR 语句会使查询返回不正确的结果