我正在做一些我在案例类和类型类上发明的练习。我遇到的问题之一如下:
object Example extends App {
sealed trait Serializer[T] {
def serialize(seq: List[T]): String
}
implicit object StringSerializer extends Serializer[String] {
def serialize(seq: List[String]): String = seq.toString()
}
implicit object IntSerializer extends Serializer[Int] {
def serialize(seq: List[Int]): String = seq.toString()
}
case class Marker[T: Serializer](lst: Option[List[T]] = None)
Marker() // ambiguous implicit values: here...
}
Run Code Online (Sandbox Code Playgroud)
现在这给出了关于不明确的隐含值的错误。我认为这与我之前问过的一个问题有关(尽管是不同的错误消息):
我是否正确,即使错误消息不同,这里的工作过程也是相同的?
我想从以下位置获取以下数据:
MyObject.builder()
.lastUpdated(tuple.getT2().isEmpty() ? null : tuple.getT2().get(0).getLastUpdated().toInstant())
...
...
.build()
Run Code Online (Sandbox Code Playgroud)
tuple.getT2().get(0).getLastUpdated() 可以为空...
我试过:
.lastUpdated(
tuple.getT2().stream()
.map(Optional::ofNullable)
.findFirst()
.flatMap(Function.identity())
.map(metadata -> metadata.getLastUpdated().toInstant()) //NPE
.orElse(null))
Run Code Online (Sandbox Code Playgroud)
但我得到了 NPE
.map(metadata -> metadata.getLastUpdated().toInstant())
Run Code Online (Sandbox Code Playgroud) 这是原始代码:
Set<StatuteType> statuteTypes = registration.getStudent().getStudentStatutesSet()
.stream()
.map(StudentStatute_Base::getType)
.collect(Collectors.toSet());
Run Code Online (Sandbox Code Playgroud)
我想将所有内容都包装在 Optional 中以避免空指针和所有内容。如果学生不存在或法规集不存在。
我拥有的:
Set<StatuteType> statuteTypes = Optional.of(registration)
.map(Registration_Base::getStudent)
.map(student -> student.getStudentStatutesSet())
.flatMap(Collection::stream)
.map(StudentStatute_Base::getType)
.collect(Collectors.toSet())
.orElse(null);
Run Code Online (Sandbox Code Playgroud)
这样的事情有可能吗?我想避免在这个链中检查空值,如果有空值,也只返回一个简单的空值,而不是得到一个异常。
通常,我认为合乎逻辑的是使用此处描述的flatMap,但在这种情况下似乎不正确,因为 Optional flatmap 返回一个 Optional。
我在玩 Java 的 Optional 并认为它就像一个 if else 块。但是在下面的代码中,即使name变量不是执行块null的内容orElse。有什么解释吗?
import java.util.Optional;
class Scratch {
public static void main(String[] args) {
String name = "some text";
System.out.println(
Optional.ofNullable(name)
.map(n -> mapped())
.orElse(getOrElse()));
}
static String mapped(){
System.out.println("mapped -- block executed");
return "mapped";
}
static String getOrElse(){
System.out.println("orElse -- block executed");
return "orElse";
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
mapped -- block executed
orElse -- block executed
mapped
Run Code Online (Sandbox Code Playgroud) 假设我有一个默认构造的,因此为空ov的 type对象std::optional<std::vector<int>>。
是的,std::vector可以在没有帮助的情况下表达空虚的概念std::optional,但请耐心等待。
然后让我们说,基于某种逻辑,我决定我必须用一个向量填充它,我想在这个向量上push_back一个一个元素。我该怎么办?
在我看来,以下内容有点难看:
ov = decltype(ov)::value_type{};
ov.push_back(/* something */);
ov.push_back(/* something else */);
Run Code Online (Sandbox Code Playgroud)
这真的是解决问题的方法吗?
我必须用 Java编写一个Predicate,我可以在其中查询 predicate 的输入以获取两个Optional<Integer>对象。我必须根据两个 Optionals 的组合值返回 true 或 false。除了检查isPresent()然后get()这些值并添加之外,还有什么更好的方法可以做到这一点。
// Here assuming the comparingValue and integer1 and integer2 are all initialised with values.
// The isGreaterOrEqual function has an implementation.
int comparingValue;
Optional<Integer> integer1;
Optional<Integer> integer2;
if (integer1.isPresent() && integer2.isPresent())
return isGreaterOrEqual(comparingValue, integer1.get() + integer2.get());
if (integer1.isPresent())
return isGreaterOrEqual(comparingValue, integer1.get());
else if (integer2.isPresent())
return isGreaterOrEqual(comparingValue, integer2.get());
else
return false;
Run Code Online (Sandbox Code Playgroud) 我有一个这样的代码。怎样才能更正确地改写它?
Optional<String> getNameBySiiPriorityInfo(Optional<SiiPriorityInfo> siiPriorityInfo){
return siiPriorityInfo.isPresent() ? Optional.ofNullable(siiPriorityInfo.get().getName()) : Optional.empty();
}
Run Code Online (Sandbox Code Playgroud) 我有一个名为type Settings的属性调用的实体,如果它是1,那么视图控制器将具有白色背景,如果为0,则背景为深灰色.backgroundColorInt
但是在尝试打开视图控制器时出现以下错误;
致命错误:数组索引超出范围
对于我的函数中的以下行
if settingsArray.count == 1 {
setting = settingsArray[1]
} else if settingsArray.count <= 0 {
println("No settings in array")
}
Run Code Online (Sandbox Code Playgroud)
查看控制器
var settingsArray: [Settings]!
var setting: Settings!
var backgroundSetting: Bool = true
override func viewWillAppear(animated: Bool) {
backgroundSettings()
}
override func viewDidLoad() {
super.viewDidLoad()
backgroundSettings()
}
// Function to fetch settings and change background
func backgroundSettings() {
var error: NSError?
let request = NSFetchRequest(entityName: "Settings")
self.settingsArray = moc?.executeFetchRequest(request, …Run Code Online (Sandbox Code Playgroud) var recorder : Recorder? = nil
func startAudioRecording() {
if recorder == nil {
recorder = Recorder()
}
if !recorder!.isRunning() {
recorder?.startRecording({ [weak self] audioData in
self?.remoteInterface?.sendVoice(audioData.0)
}, withCompletionBlock: { (_) in })
}
}
func stopAudioRecording(_ keyCommand: String!){
if let _ = recorder {
if(recorder?.isRunning())! {
recorder?.stopRecording(completionBlock: { (isFinished: Bool) in
DispatchQueue.global().asyncAfter(deadline: DispatchTime.now() + Double(Int64(1 * NSEC_PER_MSEC)) / Double(NSEC_PER_SEC), execute: { [unowned self] in
self.remoteInterface?.sendTouchUp(keyCommand)
self.audioRecorder = nil
})
})
}
}
}
Run Code Online (Sandbox Code Playgroud)
我们如何解除力量打开?
因此,从本质上讲,我希望能够将多个参数传递给一个函数。其中之一是可选的,我也希望它采用任何类型的变量。
我该怎么做才能做到这一点呢?
public new object Session (String strSession, Type objValue = null)
{
// Execute logic
}
Run Code Online (Sandbox Code Playgroud)
要么
public new object Session <T> (String strSession, objValue<T> = null)
{
// Execute logic
}
Run Code Online (Sandbox Code Playgroud)
不明白为什么这被否决了。我提供了清晰的代码段,不是吗?