我正在尝试理解,当且仅当已创建3个或更多Jpeg对象时才调用compare方法.
目标是在将Jpeg时间戳添加到表之前按升序对其进行排序.
private class ExtractJpegMetadata extends Task { private File[] selectedJpegs; private Jpeg jpeg; public ExtractJpegMetadata(Application application, File[] selectedJpegs) { super(application); this.selectedJpegs = selectedJpegs; } @Override protected Object doInBackground() throws Exception { setMessage("Extracting jpeg metadata."); for (File file : selectedJpegs) { com.drew.metadata.Metadata metadata = ImageMetadataReader.readMetadata(file); // obtain the Exif directory ExifSubIFDDirectory directory = metadata.getDirectory(ExifSubIFDDirectory.class); jpeg = new Jpeg(); jpeg.setImgTimestamp(directory.getDate(ExifSubIFDDirectory.TAG_DATETIME_ORIGINAL)); Collections.sort(jpegList, jpeg); jpegList.add(jpeg); } jpegAlbum.setJpegAlbum(jpegList); return null; } @Override protected void succeeded(Object result) { setMessage("Finished extracting jpeg metadata."); updateTableNeeded(true); } }
Jpeg课
@XmlRootElement public class Jpeg implements Comparator{ private Date imgTimestamp; public Jpeg() { } public Jpeg(Date imgTimestamp) { this.imgTimestamp = imgTimestamp; } public Date getImgTimestamp() { return imgTimestamp; } @XmlElement public void setImgTimestamp(Date imgTimestamp) { this.imgTimestamp = imgTimestamp; } public int compare(Jpeg t, Jpeg t1) { return t.getImgTimestamp().compareTo(t1.getImgTimestamp()); } }
JB Nizet.. 6
在第一次迭代中,列表为空,然后对其进行排序.没有什么可比的.然后,您将一个元素添加到列表中.
在第二次迭代中,列表包含单个元素,然后对其进行排序.还有什么可比的.然后,您将一个元素添加到列表中.
在第三次迭代中,列表中有两个元素,您可以对其进行排序.因此将第一个元素与第二个元素进行比较.然后,您将一个元素添加到列表中.
我不明白你想要实现什么,但是在每次迭代中对列表进行排序是没有用的.您最好添加所有元素,完成后,然后对列表进行排序.同样,在每次迭代时重建新的比较器也是无用的.并且由于这个比较器仅在单个方法中使用,并且实际上不是任务状态的一部分,因此也没有理由将其作为实例变量.
在第一次迭代中,列表为空,然后对其进行排序.没有什么可比的.然后,您将一个元素添加到列表中.
在第二次迭代中,列表包含单个元素,然后对其进行排序.还有什么可比的.然后,您将一个元素添加到列表中.
在第三次迭代中,列表中有两个元素,您可以对其进行排序.因此将第一个元素与第二个元素进行比较.然后,您将一个元素添加到列表中.
我不明白你想要实现什么,但是在每次迭代中对列表进行排序是没有用的.您最好添加所有元素,完成后,然后对列表进行排序.同样,在每次迭代时重建新的比较器也是无用的.并且由于这个比较器仅在单个方法中使用,并且实际上不是任务状态的一部分,因此也没有理由将其作为实例变量.