gpt4 book ai didi

如果任一值为 null,则 Java Stream 返回 null

转载 作者:行者123 更新时间:2023-11-29 04:05:25 30 4
gpt4 key购买 nike

我有一些字符串,如果有任何一个为空,那么我需要返回空。通过 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);
}

示例输出组合:

唯一通过的情况是,每个字符串都应该是非空或非空的,否则返回空

  • 字符串,字符串,字符串,字符串 -> 字符串-字符串-字符串-字符串

最佳答案

您似乎执行了一个三元运算,例如:

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

在问题中进行编辑后,条件是只有 Bill 实体中的所有此类 String 类型的属性才会在结果中被考虑。您可以制定一个方法来从所有属性中提取 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);
}

关于如果任一值为 null,则 Java Stream 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59141335/

30 4 0