Java 8 流从过滤结果中获取 object

Java 8 Stream get object from filter result

注意:我不知道我的标题是否正确,所以请随意将其更改为更合适的名称,我对 Java 8.[=13= 的术语还很陌生]

问题:我有一些object A,我想根据它所持有的一个数值来过滤它,比如说,一个整数。我想找到具有最高值的 object 然后 return 那 Object。这是如何使用流完成的?

public SomeObject getObjectWithHighestValue()
{
    int max = Integer.MIN_VALUE;
    SomeObject maxObj = null;

    for(SomeObject someObj : someList)
    {
        if(someObj.getValue() > max)
        {
            max = someObj.getValue();
            maxObj = someObj;
        }
    }

    return maxObj;
}

上面我已经包含了一个 java 7 方法来大致做我想做的事情。

SomeObject maxObject = someList.stream().max(Comparator.comparing(SomeObject::getValue).get();
return list.stream()
           .max(Comparator.comparing(SomeObject::getValue))
           .orElse(null);

不一定需要流,您也可以将 Collections.max 与自定义比较器一起使用:

import static java.util.Collections.max;
import static java.util.Comparator.comparing;

...

SomeObject o = max(someList, comparing(SomeObject::getValue));

流方法的优点是您可以在需要时并行化任务,如果列表为空,您会返回一个空的 Optional(而使用 Collections.max 会抛出空列表的异常, 但您可以先查看尺寸)。