Java 和最大值问题
Java and max value issue
我正在处理 List
个 Person
个对象。我正在尝试快速识别并 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 查询,事实证明它可以提供我们需要的速度。
感谢大家的帮助!
我正在处理 List
个 Person
个对象。我正在尝试快速识别并 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 查询,事实证明它可以提供我们需要的速度。
感谢大家的帮助!