P K :
Feedback looks like this:
public FeedbackTable(String clusterKey, Date eventStartTime, String user, Date feedbackReceivedTime, int feedback)
{
this.id=clusterKey;
this.user=user;
this.feedback=feedback;
this.feedbackReceivedTime=feedbackReceivedTime;
this.eventStartTime = eventStartTime;
}
I get a list of these feedbacks and I want a list of feedbacks which has only the latest feedbackReceivedTime for each user.
I can iterate through the feedback list and find unique users and then for each user iterate over the feedback list to get the latest feedback but it's not least order.
Pavel Smirnov :
Here's a way how to do it using Stream API:
List<FeedbackTable> feedbacks = ...; // your list of feedbacks
List<FeedbackTable> latestUsersFeedbacks
= feedbacks.stream()
.collect(Collectors.toMap(f -> f.user,
f -> f,
(f1, f2) -> f1.feedbackReceivedTime.after(f2.feedbackReceivedTime) ? f1 : f2))
.values().stream().collect(Collectors.toList());