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
会抛出空列表的异常, 但您可以先查看尺寸)。
注意:我不知道我的标题是否正确,所以请随意将其更改为更合适的名称,我对 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
会抛出空列表的异常, 但您可以先查看尺寸)。