为了帮助理解monad是什么,有人可以提供一个使用java的例子吗? 他们有可能吗? 如果您从这里下载了预发布的兼容lambda的JDK8,则可以使用java来使用lambdaexpression式: http: //jdk8.java.net/lambda/ 一个使用这个JDK的lambda的例子如下所示,有人可以提供一个相对简单的monad吗? public interface TransformService { int[] transform(List<Integer> inputs); } public static void main(String ars[]) { TransformService transformService = (inputs) -> { int[] ints = new int[inputs.size()]; int i = 0; for (Integer element : inputs) { ints[i] = element; } return ints; }; List<Integer> inputs = new ArrayList<Integer>(5) {{ add(10); […]
Enum类是可序列化的,因此使用枚举序列化对象没有问题。 另一种情况是类有java.util.Optional类的字段。 在这种情况下,会引发以下exception:java.io.NotSerializableException:java.util.Optional 如何处理这样的类,如何序列化它们? 是否有可能发送这样的对象到远程EJB或通过RMI? 这是一个例子: import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.ObjectOutputStream; import java.io.Serializable; import java.util.Optional; import org.junit.Test; public class SerializationTest { static class My implements Serializable { private static final long serialVersionUID = 1L; Optional<Integer> value = Optional.empty(); public void setValue(Integer i) { this.i = Optional.of(i); } public Optional<Integer> getValue() { return value; } […]
在Swift中给出以下内容: var optionalString: String? let dict = NSDictionary() 以下两种说法有什么实际区别: optionalString = dict.objectForKey("SomeKey") as? String VS optionalString = dict.objectForKey("SomeKey") as! String?
在Swift中处理可选项的习惯用法看起来过于冗长,如果你想要做的只是在它为零的情况下提供一个默认值: if let value = optionalValue { // do something with 'value' } else { // do the same thing with your default value } 涉及不必要的代码复制,或者 var unwrappedValue if let value = optionalValue { unwrappedValue = value } else { unwrappedValue = defaultValue } 这需要unwrappedValue不是一个常数。 Scala的Option monad(基本上和Swift的Optional相同)有这个方法的getOrElse方法: val myValue = optionalValue.getOrElse(defaultValue) 我错过了什么吗? Swift是否已经有了一个紧凑的方法呢? 或者,如果失败了,是否可以在可选的扩展中定义getOrElse ?
我一直在使用Java 8中的新的可选types ,并且遇到了一个看起来像一个常见的操作,但是在function上不受支持:“orElseOptional” 考虑以下模式: Optional<Result> resultFromServiceA = serviceA(args); if (resultFromServiceA.isPresent) return result; else { Optional<Result> resultFromServiceB = serviceB(args); if (resultFromServiceB.isPresent) return resultFromServiceB; else return serviceC(args); } 这种模式有很多种forms,但是它归结为想要一个可选的“orElse”,它带有一个产生一个新的可选的函数,只有当前函数不存在时才被调用。 它的实现看起来像这样: public Optional<T> orElse(Supplier<Optional<? extends T>> otherSupplier) { return value != null ? this : other.get(); } 我很好奇,如果有这样的一个方法不存在的原因,如果我只是用一个意想不到的方式使用可选,以及人们提出了什么其他方式来处理这种情况。 我应该说,我认为涉及自定义实用程序类/方法的解决scheme并不优雅,因为使用我的代码的人不一定知道它们存在。 另外,如果有人知道,这个方法是否会包含在JDK 9中,我可以在哪里提出这样一个方法? 这似乎是API的一个非常明显的遗漏给我。
我正在使用Xcode 6 Beta 4.我有这种奇怪的情况,我不知道如何适当地testingoptionals。 如果我有一个可选的xyz,是testing的正确方法: if (xyz) // Do something 要么 if (xyz != nil) // Do something 文件说,这是第一种方式,但我发现,有时,第二种方法是必需的,不会产生编译器错误,但有时,第二种方式会产生编译器错误。 我的具体例子是使用桥接到swift的GData XMLparsing器: let xml = GDataXMLDocument( XMLString: responseBody, options: 0, error: &xmlError); if (xmlError != nil) 在这里,如果我只是这样做: if xmlError 它总是会返回true。 但是,如果我这样做: if (xmlError != nil) 那么它的工作原理(如何在Objective-C中工作)。 GData XML和它对待我缺less的可选项的方法有什么?
在使用Java 8 Optional类时,有两种方法可以将值包装在可选项中。 String foobar = <value or null>; Optional.of(foobar); // May throw NullPointerException Optional.ofNullable(foobar); // Safe from NullPointerException 我明白Optional.ofNullable是使用Optional的唯一安全的方式,但为什么Optional.of存在呢? 为什么不使用Optional.ofNullable并始终保持安全?
我打开字典中的两个值,在使用它们之前,我必须对它们进行投射并testing正确的types。 这就是我想到的: var latitude : AnyObject! = imageDictionary["latitude"] var longitude : AnyObject! = imageDictionary["longitude"] if let latitudeDouble = latitude as? Double { if let longitudeDouble = longitude as? Double { // do stuff here } } 但是如果让查询变成一个,我想打包两个。 所以这样的事情是这样的: if let latitudeDouble = latitude as? Double, longitudeDouble = longitude as? Double { // do stuff here […]
在Java 8中,如果它存在,我想对Optional对象做些什么,如果它不存在,则做另一件事。 if (opt.isPresent()) { System.out.println("found"); } else { System.out.println("Not found"); } 不过,这不是一种“function性风格”。 Optional有一个ifPresent()方法,但是我无法链接一个orElse()方法。 因此,我不能写: opt.ifPresent( x -> System.out.println("found " + x)) .orElse( System.out.println("NOT FOUND")); 回复@assylias,我不认为Optional.map()适用于以下情况: opt.map( o -> { System.out.println("while opt is present…"); o.setProperty(xxx); dao.update(o); return null; }).orElseGet( () -> { System.out.println("create new obj"); dao.save(new obj); return null; }); 在这种情况下,当opt出现时,我更新它的属性并保存到数据库中。 当它不可用时,我创build一个新的obj并保存到数据库。 注意在两个lambda中,我必须返回null 。 但是,当opt出现时,两个lambda将被执行。 […]
从苹果的文档 : 您可以使用if和let来处理可能丢失的值。 这些值表示为可选项。 一个可选值包含一个值或者包含nil来表示缺失值。 在值的types后面写一个问号( ? ),将该值标记为可选。 你为什么要使用可选值?