java中怎样建一个空字符串_java-空字符串的Optional实现

尝试一些事情来解决您的目标,然后意识到我会从VGR那里接受想法,因为与使用现有方法相比,实现这种用例是很多额外的工作.

但是,在花一些时间查看实现之后,我可以添加的细节很少-

作为实用程序,您可以实现一个静态实现,该实现将验证字符串输入的null和isEmpty条件,并相应地返回Optional.该代码可能看起来像-

private static Optional ofEmptyable(String string) {

return isNullOrEmpty(string) ? Optional.empty() : Optional.of(string);

}

private static boolean isNullOrEmpty(String target) {

return target == null || target.isEmpty();

}

然后,这可以代替ofNullable的用法,后者专门检查null(Optional的主要目的).

由于问题陈述中的期望是像可选方法一样实际处理每个方法(map / or /或Else)调用的情况,因此与OptionalInt类似的一种方法可以是将自定义OptionalString实现为-

public final class OptionalString {

private static final OptionalString EMPTY = new OptionalString();

private final boolean isPresent;

private final String value;

private OptionalString() {

this.isPresent = false;

this.value = "";

}

private static OptionalString empty() {

return EMPTY;

}

private boolean isPresent() {

return isPresent;

}

private OptionalString(String value) {

this.isPresent = true;

this.value = value;

}

public static OptionalString of(String value) {

return value == null || value.isEmpty() ? OptionalString.empty() : new OptionalString(value);

}

public OptionalString map(Function super String, ? extends String> mapper) {

return !isPresent() ? OptionalString.empty() : OptionalString.of(mapper.apply(this.value));

}

public OptionalString or(Supplier supplier) {

return isPresent() ? this : OptionalString.of(supplier.get());

}

String orElse(String other) {

return isPresent ? value : other;

}

public String getAsString() {

return Optional.of(value).orElseThrow(() -> new NoSuchElementException("No value present"));

}

}

可以通过以下方式针对您的用例进一步实现-

String customImpl = OptionalString.of(entity.getName())

.map(OptionalStringTest::trimWhiteSpaces) // OptionalStringTest is my test class name where 'trimWhiteSpaces' operation on String resides

.or(service::getMostCommonName)

.orElse("learning");

System.out.println(String.format("custom implementation - %s", customImpl));

哪里

private static String trimWhiteSpaces(String x) {

return x.trim();

}

注意-老实说,我找不到JDK中没有OptionalString类的背后的理由(我之所以这样说是因为我怀疑背后肯定有想法),我相信这仅仅是因为我的触角半径要小得多,我希望有人能在这里添加更多细节.恕我直言,看起来几乎所有您想要的东西都在使用Optional< String>这将我们带回到循环的开始.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值