我有一个具有以下结构的对象列表:
public class ExampleObject {
private boolean someBoolean;
private int someInteger;
// getters, setters, constructor...
}
我需要一个方法,如果任何对象的 someBoolean 字段设置为 true,它将返回整数 -1,否则返回 someInteger 的最小值。
我可以用简单的 for 循环来做到这一点,有没有办法用一个流来做到这一点?我的问题是 anyMatch 和 min() 都在终止流。
最佳答案
如果 someInteger
为非负数,您可以根据 someInteger
属性的值将每个实例映射到 -1 或 boolean
,并找到最小值:
OptionalInt min = list.mapToInt (o -> o.getSomeBoolean () ? -1 : o.getSomeInteger())
.min();
如果
someInteger
可以为负,您可以将 boolean
属性为 true
的实例映射到 Integer.MIN_VALUE
,如果它等于 -1
,则将输出更改为 Integer.MIN_VALUE
。关于Java 8 在一行中流 min() 和 anyMatch()(或类似的东西),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57141069/