如果两个值中的任何一个为null,则Java Stream返回null

Zafrullah Syed:

我有一些字符串,如果任何一个为null,则需要返回null。通过Stream实现此目的的方法是什么?还是有更好的方法?

protected String toCombinedString(SomeClass shipment) {
        String prefix1 = ofNullable(shipment)
                .map(SomeClass::getBill)
                .map(Bill::getPrefixString)
                .orElse(null);

       String prefix2 = ofNullable(shipment)
                .map(SomeClass::getBill)
                .map(Bill::getPrefixString)
                .orElse(null);

        String number1 = ofNullable(shipment)
                .map(SomeClass::getBill)
                .map(Bill::getNumberString)
                .orElse(null);

        String number2 = ofNullable(shipment)
                .map(SomeClass::getBill)
                .map(Bill::getNumberString)
                .orElse(null);

              ....

        return Stream.of(prefix1, number1, prefix2, number2...)
                .filter(Objects::nonNull)
                .reduce((a, b) -> a + "-" + b)
                .orElseGet(String::new);
    }

示例输出组合:

只有通过的情况是,每个String都应该为非空或非null,否则返回null

  • 字符串,字符串,字符串,字符串->字符串-字符串-字符串-字符串
名称:

您似乎执行了三元操作,例如:

return prefix == null || number == null ? null : prefix + "-" + number;

在问题中进行编辑后,结果将仅考虑String来自Bill实体的所有此类属性您可以制定一种String从所有属性中提取的方法,如下所示:

protected String toCombinedString(SomeClass shipment) {
    return Optional.ofNullable(shipment)
            .map(SomeClass::getBill)
            .map(bill -> extractAttributes(bill, Bill::getNumberString, Bill::getPrefixString)) // use this further
            .orElse(null);
}

private String extractAttributes(Bill entity, Function<Bill, String>... mappers) {
    List<String> attributes = Arrays.stream(mappers)
            .map(function -> function.apply(entity))
            .collect(Collectors.toList());
    return attributes.stream().anyMatch(s -> s == null || s.isEmpty()) ?
            null : String.join("-", attributes);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

灿Java的Stream.collect()返回NULL?

如果JavaScript中为null或未定义,则替换一个值

具有两个数组的方法。如果第一个数组中的值返回不为null,则必须将另一个数组中的相应元素用作第二个方法的参数

浮点型原语,如果可能,则返回null;如果数据库中的值为null,则返回一个特定值

Java 8 Stream返回属性或null

简洁的方法来检查两个值之一是否为null,而另一个值是否为null

如果第一个值为null,则在合并两个值时如何获得最后一个值?

Laravel集合删除所有键,如果其中任何一个的值为NULL

如果我有一个查询将SQL Server中的两个日期进行比较,如果其中一个日期为null,该怎么办?

Excel-如果两个列中都存在一个值,则返回“ true”

如果一个值为NULL,则获取数据

比较两个对象,两个对象中的任何一个都可以为null

如何实现两个外键中的一个确切为NULL而另一个不为NULL

SQL:进行第一个匹配;如果first为null,则进行第二个匹配;如果两个都存在,则进行两个匹配(PostgreSQL)

返回列表中的第一个非NULL值;如果没有非NULL值,则返回NULL

将两个记录集合并为一个包含NULL值的结果

比较Java中两个可能为null的值

如果null简便,Java将返回一个值-如ruby nil || 值返回值

如果在Apache Spark Java中为null,则将行的值替换为另一个

如果在每种情况下其中一个为NULL,如何避免在Django模型中使用两个ForeignKey

将一个方法的返回值解析为另一个函数的两个参数?

Angular 2如何避免触发订阅,除非map返回的两个值中的任何一个已更改

MySQL:如果另一个表中的值为 NULL,如何将值插入到表中?

如果两个值为零则返回 0

SQL 不返回另一个表中为 null 的值

返回一个布尔值,判断数组中任意两个不同的数字相加是否为整数

函数只返回一个值而不是lua中的两个值

如果不存在数据,则根据两个表中的两列的值选择一个新列,为 null

如果第一个MATCH公式在excel中返回null,如何从另一个MATCH公式中选择一个值