在Java 8中,我想对一个Optional对象做一些事情,如果它存在,并做另一件事,如果它不存在.
if (opt.isPresent()) {
System.out.println("found");
} else {
System.out.println("Not found");
}
Run Code Online (Sandbox Code Playgroud)
但这不是一种"功能风格".
Optional有一个ifPresent()方法,但我无法链接一个orElse()方法.
因此,我不能写:
opt.ifPresent( x -> System.out.println("found " + x))
.orElse( System.out.println("NOT FOUND"));
Run Code Online (Sandbox Code Playgroud)
在回复@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;
});
Run Code Online (Sandbox Code Playgroud)
在这种情况下,当opt存在时,我更新其属性并保存到数据库.当它不可用时,我创建一个新的obj并保存到数据库.
请注意我必须返回的两个lambda null.
但是当opt存在时,两个lambdas都将被执行.obj将更新,并将新对象保存到数据库.这是因为return null在第一个lambda中.并且orElseGet()将继续执行.
我错过了一个选项如何map使用Listfrom 获取函数内的索引号Immutable.js:
var list2 = list1.map(mapper => { a: mapper.a, b: mapper.index??? }).toList();
文档显示的是map()回报Iterable<number, M>.有什么优雅的方式来满足我的需求吗?
当程序员抱怨空错误/异常时,有人经常会问我们做什么而没有null.
我对选项类型的酷感有一些基本的想法,但我没有最好的表达它的知识或语言技巧.对于普通程序员可以接近的方式写的以下内容有什么好的解释,我们可以指出那个人?
null programming-languages functional-programming nullpointerexception non-nullable
今天教授的软件工程完全专注于面向对象的编程和面向世界的"自然"面向对象的视图.有一个详细的方法描述了如何将域模型转换为具有多个步骤的类模型以及许多(UML)工件,如用例图或类图.许多程序员已经内化了这种方法,并且很好地了解了如何从头开始设计面向对象的应用程序.
新的炒作是函数式编程,在许多书籍和教程中都有教授.但功能软件工程呢?在阅读有关Lisp和Clojure的文章时,我发现了两个有趣的陈述:
功能程序通常是自下而上而不是自上而下开发('On Lisp',Paul Graham)
函数程序员使用映射,其中OO程序员使用对象/类('Clojure for Java Programmers',Rich Hickley的演讲).
那么功能性应用程序的系统化(基于模型的?)设计的方法是什么,即在Lisp或Clojure中?有哪些常见步骤,我使用哪些工件,如何将它们从问题空间映射到解决方案空间?
lisp functional-programming clojure model-driven-development
让我们说你有一个:
List<string> los = new List<string>();
Run Code Online (Sandbox Code Playgroud)
在这个疯狂的功能世界中,我们生活在这些日子里,其中一个最适合通过连接这些来创建一个字符串:
String.Join(String.Empty, los.ToArray());
StringBuilder builder = new StringBuilder();
los.ForEach(s => builder.Append(s));
string disp = los.Aggregate<string>((a, b) => a + b);
Run Code Online (Sandbox Code Playgroud)
或简单的旧StringBuilder foreach
或者,还有更好的方法?
我已经阅读了一些关于声明/函数编程(语言)的文章,尝试过Haskell以及自己编写的文本.从我所看到的,函数式编程比传统的命令式风格有几个优点:
生产力提高(例如:Erlang)
命令式编程是一个非常古老的范例(据我所知),可能不适合21世纪
为什么使用功能语言的公司或程序仍然如此"罕见"?
为什么在查看函数式编程的优点时,我们仍在使用命令式编程语言?
也许它在1990年还为时尚早,但今天呢?
有没有相当于Python的zip函数的javascript?也就是说,给定多个相等长度的数组会创建一对数组.
例如,如果我有三个如下所示的数组:
var array1 = [1, 2, 3];
var array2 = ['a','b','c'];
var array3 = [4, 5, 6];
Run Code Online (Sandbox Code Playgroud)
输出数组应该是:
var output array:[[1,'a',4], [2,'b',5], [3,'c',6]]
Run Code Online (Sandbox Code Playgroud) 我已经学会了foldLeft和之间的基本区别reduceLeft
foldLeft:
reduceLeft:
还有其他区别吗?
有两种方法具有相似功能的任何特定原因?
javascript ×2
c# ×1
clojure ×1
fold ×1
functor ×1
glossary ×1
immutable.js ×1
java ×1
java-8 ×1
lisp ×1
non-nullable ×1
null ×1
ocaml ×1
optional ×1
paradigms ×1
performance ×1
python ×1
scala ×1
string ×1
transpose ×1