我想使用 Java 8 使用多个if和else语句来简化下面的代码。有没有办法使用一些 Java 8 功能来完全摆脱它们,例如Optional?我试图在这里找到一些东西,但找不到答案。
LocalDateTime beDate = someDate;
LocalDateTime aeDate = someDate;
LocalDateTime eDate;
if (beDate == null && aeDate == null) {
eDate = null;
}
else if (beDate != null && aeDate == null) {
eDate = beDate;
}
else if (beDate == null && aeDate != null) {
eDate = aeDate;
}
else if (beDate != null && aeDate != null &&
(beDate.isEqual(aeDate) || beDate.isBefore(aeDate))) {
eDate = …Run Code Online (Sandbox Code Playgroud) 我有一个服务,它从数据库中查询优惠券列表。此服务Optional向客户端返回。
return listOfCoupons.isEmpty() ? Optional.empty() : Optional.of(listOfCoupons.get(listOfCoupons.size() - 1));
Run Code Online (Sandbox Code Playgroud)
此代码的客户端Optional以以下方式使用命名的“优惠券”:
if (coupons.isPresent) {
save (coupons.get());
}
Run Code Online (Sandbox Code Playgroud)
这是正确的用法Optional吗?
使用
self.backgroundColor = .init(named: "my-color")
Run Code Online (Sandbox Code Playgroud)
这里self是一个UIView,触发此错误:
可选类型“UIColor?”的值 必须
使用 '??'展开为类型为 'UIColor' Coalesce的值 当可选值包含“nil”时提供默认值 [Fix]
使用“!”强制解包 如果可选值包含“nil”,则中止执行[修复]
编译器知道该backgroundColor属性是 type UIColor?,所以它应该为初始化程序推断它,对吗?
此外,知道该属性是可选的,错误消息对我来说没有太大意义。
此外,两个自动修复都是“递归的”,这意味着它们不会修复错误,我可以一遍又一遍地应用它们。
注意:我知道我可以使用UIColor.init或简单地使用UIColor. 这只是一个简化的例子。
我有一个计算平均成本的流,代码看起来像这样
private Double calculateAverageCost(List<Item> items) {
return items.stream()
.mapToDouble(item -> item.cost)
.filter(cost -> cost > 0) // Ignore zero cost items
.average()
. // Something here to convert an OptionalDouble to value or null
}
Run Code Online (Sandbox Code Playgroud)
我需要返回值或null没有值的方法(例如,当所有成本为零时)。我的问题是不存在orElseNull的方法OptionalDouble做转换。我可以在另一个步骤中完成,例如
private Double calculateAverageCost(List<Item> items) {
final OptionalDouble average = items.stream()
.mapToDouble(item -> item.cost)
.filter(cost -> cost > 0) // Ignore zero cost items
.average();
return average.isPresent() ? average.getAsDouble() : null;
}
Run Code Online (Sandbox Code Playgroud)
我意识到这是一个“原始”流,我的方法返回盒装,Double但看起来这可能会有所帮助,类似于 ( Optional.empty().orElseGet(null))。
我缺少原因或更好的解决方案吗?
我要替换(删除)特定的可选单词(AAA,BBB,CCC),这些单词在特定单词(ALWAYS_THERE)前后紧随其后
this is important AAA BBB ALWAYS_THERE CCC
this is important BBB AAA ALWAYS_THERE CCC
this is important AAA CCC ALWAYS_THERE BBB
this is important BBB ALWAYS_THERE CCC AAA
this is important BBB this also ALWAYS_THERE CCC AAA
Run Code Online (Sandbox Code Playgroud)
至
this is important
this is important
this is important
this is important
this is important BBB this also
Run Code Online (Sandbox Code Playgroud)
如何在perl(或UNIX上的任何其他可用程序)中完成此操作?
在Swift,为什么呢
var x: Int? = nil
if let y: Int? = x { ... }
Run Code Online (Sandbox Code Playgroud)
表现不同于
if let y: Int? = nil { ... }
Run Code Online (Sandbox Code Playgroud)
我对第一个案例成功的原因的理解表明第二个案例也应该如此,所以我不能真正理解.
后者不会因为无效的分配而失败,也不会因为可选的链接而失败; 否则它看起来和前者一样.为什么后者失败了,它与前者有何不同.究竟是什么时候,以及出于什么原因,第二个可选绑定被放弃了?
syntax variable-assignment optional conditional-statements swift
假设您需要编写将闭包作为参数之一的函数来将其称为回调.该函数的用户应该能够传递nil而不是关闭.在这种情况下,您会使用期权还是隐式解包期权?
提前致谢.
我一直在玩swift的可选项.我经常使用条件展开模式:
var myOptional: AnyObject?
if let unwrapped = myOptional {
// do stuff
}
Run Code Online (Sandbox Code Playgroud)
但是,有时候我有两个可选值,如果两个都是非零的话我只想使用它们.因此,我尝试使用以下语法:
var myOptional: AnyObject?
var myOtherOptional: AnyObject?
if let unwrapped = myOptional && let otherUnwrapped = myOtherOptional? {
// do stuff
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试将这两个部分放在括号等中,但似乎没有办法做到这一点.有没有理由说我不应该这样做?显然我可以在另一个语句中嵌入一个语句,但我更愿意将它全部放在一行上.
看着这个,
@IBOutlet weak var label1 : UILabel!
Run Code Online (Sandbox Code Playgroud)
为什么UILabel是可选的?我建立了与UILabel的IBOutlet连接的事实意味着UILabel DEFINATELY存在,并且不会是零.那为什么它是可选的UIlabel?而不是UILabel?
我想知道是否存在与Swift中的选项相关的任何性能成本,例如,如果我们必须重复使用选项.考虑以下两个代码片段
第一种方法
var f: Foo?
// foo returns an optional
if let anotherF = foo() {
f = anotherF
}
else {
f = Foo()
}
f?.doSomething()
f?.doSomethingElse()
f?.doAnotherThing()
// and so on
Run Code Online (Sandbox Code Playgroud)
第二种方法
var f = Foo()
if let anotherF = foo() {
f = anotherF
}
f.doSomething()
f.doAnotherThing()
f.doAnotherThing()
// and so on
Run Code Online (Sandbox Code Playgroud)
与第一种方法相比,第二种方法是否有任何性能优势
optional ×10
swift ×6
java ×3
if-statement ×2
ios ×2
java-8 ×2
datetime ×1
java-stream ×1
performance ×1
perl ×1
regex ×1
substitution ×1
syntax ×1
syntax-error ×1
uibutton ×1
uilabel ×1
words ×1