我有一个具有以下结构的对象列表:

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/

10-10 17:07