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

时间:2018-11-09 08:29:32

标签: java java-8 java-stream

我了解如何收集到List,但不知道 我将如何仅将过滤对象的一个​​参数作为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对象。

2 个答案:

答案 0 :(得分:13)

使用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*/));

答案 1 :(得分:1)

也许是更好的方法:

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*/);