是否有更优雅的方法从流中选择max或min方法?

spr*_*ten 2 java java-8 java-stream

我希望根据某些条件从列表中获取最小或最大项目.下面的摘录总结了我在做什么:

Optional<Person> target;
if(condition){
    target = detailedList.stream().min((d1, d2) -> d1.age() + d2.age());
} else {
    target = detailedList.stream().max((d1, d2) -> d1.age() + d2.age());
}
Run Code Online (Sandbox Code Playgroud)

它有效,但相当冗长.本质上,我想在流中选择方法minmax.有一个更好的方法吗?

Bri*_*etz 8

这是另一种方式:

Comparator<Person> comp = Comparator.comparingInt(Person::age);
BinaryOperator<Person> op 
    = condition ? BinaryOperator.minBy(comp) : BinaryOperator.maxBy(comp);

Optional<Person> target = list.stream().reduce(op);
Run Code Online (Sandbox Code Playgroud)