一行中的 Java 8 流 min() 和 anyMatch() (或类似的东西)

标签 java java-8 java-stream

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

public class ExampleObject {

    private boolean someBoolean;
    private int someInteger;
    // getters, setters, constructor...
}

我需要一个方法,如果任何对象的 someBoolean 字段设置为 true,它将返回整数 -1,否则返回 someInteger 的最小值。

我可以用简单的 for 循环来完成,有没有一种方法可以用一个流来完成?我的问题是 anyMatch 和 min() 都在终止流。

最佳答案

如果 someInteger 是非负数,您可以根据 boolean 属性的值将每个实例映射到 -1 或 someInteger , 并找到最小值:

OptionalInt min = list.mapToInt (o -> o.getSomeBoolean () ? -1 : o.getSomeInteger())
                      .min();

如果 someInteger 可以为负数,您可以将 boolean 属性为 true 的实例映射到 Integer.MIN_VALUE,如果它等于 Integer.MIN_VALUE,则将输出更改为 -1

关于一行中的 Java 8 流 min() 和 anyMatch() (或类似的东西),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57141069/

相关文章:

java - StreamSupport 收集器和 Java 7

java - 使用 DynamicReports 创建的 Excel 中以文本形式存储的数字

Java8 从类中检索 lambda setter

从列表中查找最大元素的java流性能

java - 在顺序排序的流中查找丢失的整数

java - 如何在 java 8 中将 List 转换为 Map,.map 函数在链中

java - Java中集合对象的最大值

java - 为什么 equals 方法需要一个 Object 参数?

java - 如何创建正确的 DateTimeFormatter 模式

java8 将 Map<X,Y> + Map<Y,Z> 转换为 Map<X,Z>