Как вернуть список объектов из Arraylist, когда прошло две даты в Java?

Использую следующий код для возврата фотообъектов из массива между начальной и конечной датами (даты представлены в формате YYYY-MM-DD). если таких объектов нет, он должен вернуть пустой список.

Как я могу изменить, чтобы получить результат? Есть две части кода. Вот первая часть:

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;
}`

3 ответа

Решение

Вам нужно конвертировать ваши 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;
} 

Я полагаю, у вашего фотообъекта есть свойство под названием "дата". Поэтому я думаю, что вы хотели бы, чтобы что-то подобное добавляло фотографии в ваш 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);

Теперь у вас есть ArrayList типа photo с одной фотографией, если дата соответствует заданным параметрам.

Удалить return photolist; в если заявление, потому что вы вернетесь arraylist с 1 элементом, который найден первым

также вы сравниваете startDate а также endDate этот метод получил. Я думаю, что вы пытаетесь сделать что-то подобное для вас нужно getter

if(startdate.compareTo(pho.getStartDate())< 0)
Другие вопросы по тегам