繁体   English   中英

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

[英]Java 8 Stream get object from filter result

注意:我不知道我是否正确标题,所以请随意将其更改为更合适的东西,我对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的方式来做我想要的大致。

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

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

...

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM