Return 使用 reduce 函数时的第一个元素
Return first element while using reduce function
我正在使用 java 流的减少功能。
我的流数据如下:
List<Person> persons =
Arrays.asList(
new Person("Max", 18),
new Person("Peter", 23),
new Person("Pamela", 23),
new Person("David", 12),
new Person("Pam", 23));
我的Reduce函数如下:
persons.stream()
.reduce((p1, p2) -> p1.age > p2.age ? p1 : p2)
.ifPresent(System.out::println);
我得到的结果是
Pam
但是我的要求是元素Peter,因为它的值也比其他的大。
Peter
我怎样才能做到这一点?还有其他替代方法吗?
尝试:
persons.stream()
.reduce((p1, p2) -> p1.age >= p2.age ? p1 : p2)
.ifPresent(System.out::println);
请注意,我将条件从 p1.age > p2.age
更改为 p1.age >= p2.age
,因此较早的 Person
实例与较晚的实例具有相同的年龄将被优先考虑。
按照以下规则简单地减少:
对于给定的一对人,p1
和 p2
:
- 如果
p1.age < p2.age
,结果应该是p2
- 如果
p1.age > p2.age
,结果应该是p1
- 如果
p1.age == p2.age
,结果应该是p1
。
易于实施:
persons.stream()
.reduce((p1, p2) -> p1.age < p2.age ? p2 : p1)
PS:您当前的代码有一个 typeo,将始终减少到列表中的最后一个元素,忽略年龄比较。
我正在使用 java 流的减少功能。 我的流数据如下:
List<Person> persons =
Arrays.asList(
new Person("Max", 18),
new Person("Peter", 23),
new Person("Pamela", 23),
new Person("David", 12),
new Person("Pam", 23));
我的Reduce函数如下:
persons.stream()
.reduce((p1, p2) -> p1.age > p2.age ? p1 : p2)
.ifPresent(System.out::println);
我得到的结果是
Pam
但是我的要求是元素Peter,因为它的值也比其他的大。
Peter
我怎样才能做到这一点?还有其他替代方法吗?
尝试:
persons.stream()
.reduce((p1, p2) -> p1.age >= p2.age ? p1 : p2)
.ifPresent(System.out::println);
请注意,我将条件从 p1.age > p2.age
更改为 p1.age >= p2.age
,因此较早的 Person
实例与较晚的实例具有相同的年龄将被优先考虑。
按照以下规则简单地减少:
对于给定的一对人,p1
和 p2
:
- 如果
p1.age < p2.age
,结果应该是p2
- 如果
p1.age > p2.age
,结果应该是p1
- 如果
p1.age == p2.age
,结果应该是p1
。
易于实施:
persons.stream()
.reduce((p1, p2) -> p1.age < p2.age ? p2 : p1)
PS:您当前的代码有一个 typeo,将始终减少到列表中的最后一个元素,忽略年龄比较。