Получение последних уникальных параметров из ArrayList

#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. время выполнения также важно для меня