注意:我不知道我是否正确标题,所以请随意将其更改为更合适的内容,我对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 大致按照我想要的方式。
答案 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">