Как вернуть список объектов из 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)