Java 和最大值问题

Java and max value issue

我正在处理 ListPerson 个对象。我正在尝试快速识别并 return 所有 Person 的最大日期。

例如:

Persons:[
{
  id: 1
  submitDate: 2010-01-01
  name : john Smith
},
{
  id: 1
  submitDate: 2011-01-01
  name : john Smith
},
{
  id: 2
  submitDate: 2011-01-02
  name : jason Doe
},
{
  id: 1
  submitDate: 2012-01-01
  name : john Smith
},
{
  id: 1
  submitDate: 2013-01-01
  name : john Smith
},
{
  id: 2
  submitDate: 2013-01-02
  name : jason Doe
}
]

我正在寻找一种方法,在 Java 中,return 以下(最大 submitDate 值):

Persons: [
{
  id: 1
  submitDate: 2013-01-01
  name : john Smith
},
{
  id: 2
  submitDate: 2013-01-02
  name : jason Doe
}
]

关于如何最好地实现这一点有什么想法吗?

============================================= =========================== 我试过:

List<Person> personList = Lists.newArrayList();
getPersonList().stream()
               .map(this.setSource)
               .max(Comparator.comparing(Person::getSubmitDate))
               .map(personList::add);

但是它 return 是一条 Person 记录,不是每个 的最大提交日期 Person

    List<Person> persons = ...
    List<Person> resultList = new ArrayList<>();
    Map<Integer, List<Person>> personsBySubmitDate =
            persons.stream().collect(Collectors.groupingBy(person -> person.getId());

    for (Map.Entry<Integer, List<Person>> entry : personsBySubmitDate.entrySet()) {
        Person currentPerson = entry.getValue()
                                    .stream()
                                    .max(Comparator.comparing(Person::getSubmitDate))
                                    .orElse(null);
        resultList.add(currentPerson);
    }

应该是O(n)。

@Default71721,您的答案非常有效,但我注意到较长的列表确实使系统陷入困境(O(n^2) 处理)。我决定重新编写 SQL 查询,事实证明它可以提供我们需要的速度。

感谢大家的帮助!