Я бы посоветовал не использовать такую модель, как 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));