如何在 java 中传递两个日期时 return 来自 arraylist 的对象列表?

how to return a list of objects from arraylist when passed two dates in java?

我正在使用以下代码 return arraylist 中开始日期和结束日期之间的照片对象(日期采用 YYYY-MM-DD 字符串格式)。如果没有这样的对象,它应该 return 空列表。

如何修改才能得到结果?代码分为两部分。这是第一部分:

public class Photo {
    private String title;
    private string date;

    public String getTitle() {
        return title;
    }

    public String getDate() {
        return date;
    }

这是第二部分:

import java.util.ArrayList;

public class Album {

    private String albumtitle;
    private ArrayList<Photo> photos; 
    public ArrayList<Photo> datedPhotos(String date1, String date2) {
        String startdate = date1;
        String enddate = date2;
        ArrayList<Photo> photolist = new ArrayList<>();
        for (Photo pho : photos) {
            if (pho.getDate().compareTo(enddate)< 0 && pho.getDate().compareTo(startdate)>0) {
                photolist.add(pho);
            }
        }
        return photolist;
}`

删除 if 语句中的 return photolist;,因为您 return arraylist 具有第一个找到的元素

你也在比较那个方法得到的 startDateendDate。我认为您正在尝试做这样的事情,因为您需要 getter

if(startdate.compareTo(pho.getStartDate())< 0)

您需要将 String 转换为日期,以便可以比较日期。您可以使用 SimpleDateFormat 来实现相同的目的。转换后需要检查每张照片的日期是否在startDate之后endDate之前。

public ArrayList<Photo> datedPhotos(String date1, String date2) {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    ArrayList<Photo> photolist = new ArrayList<>();
    Date startDate, endDate;

    try {
        startDate = sdf.parse(date1);
        endDate = sdf.parse(date2);
        List<Photo> photos = new ArrayList<>();

        for (Photo pho : photos) {
            if (startDate.before(pho.getDate()) && endDate.after(pho.getDate())) {
                photolist.add(pho);
            }
        }
    } catch (ParseException e) {
        // Handle Exception accordingly
    }

    return photolist;
} 

我想您的照片对象有一个名为 'date' 的 属性。所以我想你会想要这样的东西来将照片添加到你的 ArrayList

import java.util.ArrayList;

public class Album {

private String albumtitle;
private ArrayList<Photo> photos; 
public ArrayList<Photo> datedPhotos(String date1, String date2, ArrayList(Photo) photos) {
    String startdate = date1;
    String enddate = date2;
//edit - you actually do not need to cycle through the arraylist.....
        if (photos.date.compareTo(enddate)< 0 && photos.date.compareTo(startdate) > 0) {
            photolist.add(pho);
        }
       return photolist;
}`

然后在您的代码中的其他地方您将拥有:

Alblum ab = new Album();
ArrayList<photo> myPhotos;
Photo newPhoto = new Photo();
newPhoto.image = "mypicture.jpg";
newPhoto.date = new Date('........');
startdate = new Date('.........');
enddate = new Date('.........);
myPhotos = ab.datedPhotos(startdate, enddate, newPhoto);

现在你有一个 photo 类型的 ArrayList,其中包含一张照片,前提是日期在定义的参数范围内。