#java #arrays #rss #feed
#java #массивы #RSS-канал #лента
Вопрос:
Я получаю список URL-адресов из канала, как мне получить желаемый URL-адрес из списка.
Я получаю список URL-адресов, которые я передаю объекту, среди них URL-адрес самого изображения, миниатюра, информация о типе файла и т.д.
URL url = new URL("https://catalog.example.com/publicdomain/browse/en/recent.atom");
XmlReader xmlReader = null;
try {
xmlReader = new XmlReader(url);
SyndFeed feeder = new SyndFeedInput().build(xmlReader);
for (Iterator iterator = feeder.getEntries().iterator(); iterator
.hasNext();) {
SyndEntry syndEntry = (SyndEntry) iterator.next();
System.out.println(syndEntry.getAuthor());
Object[] str = syndEntry.getLinks().toArray();
System.out.println(str[3] );
}
} finally {
if (xmlReader != null)
xmlReader.close();
}
Когда я использую ‘str[3]’, вывод следующий:
John Doe
SyndLinkImpl.hreflang=null
SyndLinkImpl.rel=http://opds-example.org/image/thumbnail
SyndLinkImpl.length=0
SyndLinkImpl.href=https://covers.example.net/book/6709.jpg
SyndLinkImpl.title=null
SyndLinkImpl.type=image/jpeg
Я не хочу жестко указывать индекс массива, потому что канал может измениться.
Как мне изменить свой код, чтобы определить, в каком индексе массива есть URL-адрес для типа image, и скопировать URL-адрес.
Я хотел бы использовать тот же подход, чтобы проверить, в каком индексе есть URL-адрес для содержимого типа pdf.
Thamls
Ответ №1:
Я бы сделал это следующим образом:
SyndFeed feeder = new SyndFeedInput().build(xmlReader);
for (SyndEntry syndEntry: feeder.getEntries()) {
System.out.println(syndEntry.getAuthor());
List<SyndLinkImpl> links = syndEntry.getLinks().stream().filter(link -> "image/jpeg".equals(link.getType))()).collect(Collectors.toList());
System.out.println(links.toArray());
}
Комментарии:
1. Спасибо @Naya. я заметил ошибку со скобками в четвертой строке. Не могли бы вы это проверить.