首页 > 解决方案 > 如何从java流中只返回一个字符串

问题描述

我了解如何收集到 a List,但不知道如何将过滤对象的一个​​参数返回为 a String

fee = new BigDecimal(fees
            .stream()
            .filter(p -> p.getTodate().isAfter(LocalDateTime.now()))
            .filter(p -> p.getFromdate().isBefore(LocalDateTime.now()))
            .filter(p -> p.getId().equals(id))

    return fee;

我首先检查费用是否是最新的,因为可能会有即将发生的费用和不再有效的费用。然后我将 id 与剩余费用相匹配。但是最后一个过滤器和返回之间缺少代码。

我只想String从构造函数的Stream对象(p.getFee)返回BigDecimal

我知道过滤器后只剩下一个Stream对象。

标签: javajava-8java-stream

解决方案


用于findFirst返回Stream通过过滤器的第一个元素。它返回一个Optional,因此您可以使用它orElse()来设置默认值,以防Stream为空。

fee = new BigDecimal(fees
            .stream()
            .filter(p -> p.getTodate().isAfter(LocalDateTime.now()))
            .filter(p -> p.getFromdate().isBefore(LocalDateTime.now()))
            .filter(p -> p.getId().equals(id))
            .map(p -> p.getFee())
            .findFirst()
            .orElse(/*some default value*/));

推荐阅读