Java 8 Stream从过滤结果中获取对象

时间:2015-09-21 15:55:07

标签: java java-8 java-stream

注意:我不知道我是否正确标题,所以请随意将其更改为更合适的内容,我对Java 8的术语不太了解。

问题:我有一些对象A,我想基于它所拥有的数值来过滤它,比如一个整数。我想找到具有最高值的对象,然后返回该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 大致按照我想要的方式。

3 个答案:

答案 0 :(得分:4)

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

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

...

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

流方法的优点是,如果需要,您可以并行化任务,如果列表为空,则返回空的Optional(而使用Collections.max将使用空列表抛出异常,但是你可以检查之前的尺寸。

答案 1 :(得分:3)

return list.stream()
           .max(Comparator.comparing(SomeObject::getValue))
           .orElse(null);

答案 2 :(得分:1)

  <link rel="stylesheet" type="text/css" href="/print.css" media="print">