#java #java-7
#java #java-7
Вопрос:
У меня есть следующие данные:
class Param{
Long id;
String name;
Date date;
}
List<Param> myList = new ArrayList<>();
myList.add(new Param (1L, "AAA", new date(2020,11,1)));
myList.add(new Param (1L, "AAA", new date(2019,11,1)));
myList.add(new Param (2L, "BBB", new date()));
Я хочу получить новый список, содержащий только объекты с уникальным идентификатором и именем с последней датой:
e.g: myNewList content: [{1L, "AAA", new date(2020,10,1)},{2L, "BBB", new date()}]
Моя проблема в том, что я должен сделать это без переопределения методов equals() и hashcode() класса Param и без использования Java streams (это устаревший проект, использующий Java 7).
Есть ли какой-либо эффективный способ получить последние уникальные параметры без обновления класса Param?
Комментарии:
1. Если вы не можете переопределить методы Param class equals и hashCode, как вы думаете, вы могли бы расширить его? Например, создать дочерний параметр, расширяющий параметр, а затем переопределить методы только с целью получения этого нового списка?
2. Вы можете создать a
Map<Param,Param>
с помощью пользовательского компаратора, который сравнивает только поляid
иname
Param
класса. Затем повторитеmyList
. Если текущий параметр еще не существует на карте, добавьте его в качестве ключа и значения. Если он уже существует, замените значение в этом параметре, если текущий параметр старше сохраненного. В конце соберите значения с карты и готово. РЕДАКТИРОВАТЬ: на самом деле вы, вероятно, можете сделать еще лучше: отсортироватьmyList
с помощью пользовательского компилятора, а затем просмотреть отсортированный список, сохраняя только последний элемент для каждой пары id / name.3. или используйте любые структуры данных (Map, List или что-то еще), где вы можете проверить, содержится ли элемент с некоторым идентификатором. затем выполните итерацию по списку, для каждого элемента я проверяю, нет ли i в S или в S, но дата < i.date . затем добавьте или замените.
4. вы хотите повысить эффективность с точки зрения времени выполнения или времени разработки или и того, и другого?
5. время выполнения также важно для меня