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 实例与较晚的实例具有相同的年龄将被优先考虑。

按照以下规则简单地减少:

对于给定的一对人,p1p2

  1. 如果p1.age < p2.age,结果应该是p2
  2. 如果p1.age > p2.age,结果应该是p1
  3. 如果p1.age == p2.age,结果应该是p1

易于实施:

persons.stream()
            .reduce((p1, p2) -> p1.age < p2.age ? p2 : p1)

PS:您当前的代码有一个 typeo,将始终减少到列表中的最后一个元素,忽略年龄比较。