Как отсортировать HTML элементы по <TD>дате и удалить дубликаты по <A>в Java? - PullRequest
0 голосов
/ 05 марта 2020

У меня есть HTML фрагмент, который мне нужно изменить в Java, я использую JSOUP для анализа, но я чувствую, что он может быть не таким эффективным. Я загрузил фотографии того, что я ищу здесь. Сортировка от даты новостей ТД до самой старой и при наличии дубликата. А hrefs удаляют узел в целом. У меня есть массив данных заданных элементов div, который также будет включен

ObservableList<String> names; 

Я думаю, что может быть способ просмотреть весь список и получить его от этого имени до тех пор, пока не будет достигнут элемент div? Я чувствую, что это простая проблема, и я задумываюсь над этим, спасибо за помощь!

foreach(String name: names)
{}

Перед примером

Пример отсортирован без дубликатов

HTML (без сортировки с дубликатами):

<div>CHTR</div>
<td width="130" align="right" style="white-space:nowrap">Mar-04-20 08:54AM&nbsp;&nbsp;</td>
</br>
<a sname='CHTR' href="https://test.com/news/why-charter-chtr-stock-might-135401270.html" target="_blank" class="tab-link-news">Why Charter (CHTR) Stock Might be a Great Pick</a></br>
<td width="130" align="right">Mar-04-20 08:53AM&nbsp;&nbsp;</td>
</br>
<a sname='CHTR' href="https://test.com/news/charter-offers-senior-unsecured-notes-135400843.html" target="_blank" class="tab-link-news">Charter Offers Senior Unsecured Notes</a>. 
</br>
<div>PEGI</div>
<td width="130" align="right" style="white-space:nowrap">Mar-04-20 12:49 PM&nbsp;&nbsp;</td>
</br>
<a sname='PEGI' href="www.test.com/news/3548648-pattern-energy-low-odds-of-competing-bid-raymond-james-says">Pattern Energy has low odds of competing bid, Raymond James says</a></br>
<div>CHTR</div>
<td width="130" align="right" style="white-space:nowrap">Mar-04-20 12:39 PM&nbsp;&nbsp;</td>
</br>
<a sname='CHTR' href="www.test.com/news/3548649-charter-offering-senior-notes">Charter offering more senior notes</a></br>
<div>PEGI</div>
<td width="130" align="right" style="white-space:nowrap">Mar-04-20 12:49 PM&nbsp;&nbsp;</td>
</br>
<a sname='PEGI' href="www.test.com/news/3548648-pattern-energy-low-odds-of-competing-bid-raymond-james-says">Pattern Energy has low odds of competing bid, Raymond James says</a></br>
<td width="130" align="right" style="white-space:nowrap">Mar-04-20 08:40 AM&nbsp;&nbsp;</td>
</br>
<a sname='PEGI' href="www.test.com/news/greatbuy">Great buy with PEGI</a></br>    

Ответы [ 2 ]

0 голосов
/ 06 марта 2020

Не уверен, правильно ли я понял, но как насчет разбора Html на HashMap для получения пар ключ-значение? Это избавило бы от дублирования по крайней мере. Тогда вы могли бы сделать что-то вроде:

List<Employee> employeeById = new ArrayList<>(map.values());
Collections.sort(employeeById);

И получить результаты как:

[Employee{id=1, name='Mher'}, 
Employee{id=2, name='George'}, 
Employee{id=8, name='John'}, 
Employee{id=22, name='Annie'}]

Источник: https://www.baeldung.com/java-hashmap-sort

0 голосов
/ 05 марта 2020

Проанализировал HTML и добавил их в список, затем создал пользовательский объект, затем два компаратора для двойной сортировки списка.

    Comparator<MyObject> compareByName = Comparator
         .comparing(Article::getName);

    Comparator<MyObject> compareByName2 = Comparator
             .comparing(MyObject::getDate).reversed();

    myList.sort(compareByName.thenComparing(compareByName2));
...