How to find latest feedback given by each user from list of feedbacks in least order?

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());

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=129749&siteId=1