Home > Enterprise >  How do manipulate list of objects by date parameters in a hashmap?
How do manipulate list of objects by date parameters in a hashmap?

Time:06-29

I have a hashmap with key and object like

HashMap<String,List<Object,> > profileMap= new HashMap<>(); ArrayList eventList = new ArrayList();

for(Profile profile:Plist) { > profileMap.putIfAbsent(profile.getprofileID(),eventList ); cpToEvent.get(event.getContact_profile()).add(event); }

Profile object contains information about different events, event date, and profileID associated with that event.

I need to delete the events of the profile where the gap between two events in a profile is more than 1 yrs.

For that, I need to sort the list so that I can calculate the gap between them before deleting them. How do achieve this?

CodePudding user response:

If you are trying to have the elements in your List sorted, I recommend using a natively existing type such as a "SortedSet" implementation. E.g. a TreeSet

Map<String, TreeSet<Object>> profileMap = new HashMap<>();

This will have you implementing the Comparator Interface in which you can define to sort by Date.

public class Objekt implements Comparator<Objekt> {

@Override
public int compare(Objekt o1, Objekt o2) {
    if (o1.getDate().before(o2.getDate())) {
        return -1;
    } else if (o1.getDate().after(o2.getDate())) {
        return 1;
    } else {
        return 0;
    }
}

More on how to implement that here: Compare Object by dates ( implements Comparator)

CodePudding user response:

You can try to iterate over the HashMap item and filter the element with Date that is older than 1 year.

Given the Profile class as below

public class Profile {

private Date createdAt;

public Date getCreatedAt() {
    return createdAt;
}

public void setCreatedAt(Date createdAt) {
    this.createdAt = createdAt;
}

}

And our List is

HashMap<String, Profile> profiles = new HashMap<>();

Then we can simply do as below to get the list of Map.Entry that matches your requirement.

List<Map.Entry<String, Profile>> matchProfile = profiles.entrySet().stream().filter(item -> item.getValue().getCreatedAt().getYear() > 2015)
            .collect(Collectors.toList());
  • Related