如何从 java 流中仅返回一个字符串

2022-09-04 00:53:35

我知道如何收集到 a ,但无法弄清楚如何将已过滤对象的一个参数作为 返回。ListString

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与剩余费用相匹配。但是,在最后一个筛选器和返回之间缺少代码。

我只想从构造函数的对象(p.getFee)返回。StringStreamBigDecimal

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


答案 1

用于返回通过筛选器的第一个元素。它返回 一个 ,因此您可以使用 在 为空的情况下设置默认值。findFirstStreamOptionalorElse()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*/));

答案 2

也许这会是一个更好的方法:

fee = 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()
        .map(BigDecimal::new)
        .orElse(/*some default value*/);

推荐