`
deepinmind
  • 浏览: 450764 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
1dc14e59-7bdf-33ab-841a-02d087aed982
Java函数式编程
浏览量:41549
社区版块
存档分类
最新评论
文章列表
1. Git 之前也有过不少版本控制的工具。有好的,也有糟糕的。不过它们都或多或少地误入歧途了。 这时候Git出现了。一旦你用上了这个神奇的工具,很难相像你还会碰到比它更好的了。 还没用过Git?试一下吧。 2. Stack Overf ...
最近总有人问我,Java SE8里有没有针对尾调用做优化(这是一种特殊的函数调用)。这个优化和递归调用密切相关,而递归调用对函数式语言来说尤其重要,因为它们通常都基于递归来进行设计编码。本文会介绍到什么是尾调用 ...
JDK 8中一个很少被提及的特性就是它可以方法参数的元信息存储到编译完的class文件中(JEP 118)。这个特性使得Java程序可以在运行时通过反射来获取参数的元信息。 在Java教程——反射API中有节课叫获取方法参数的名字,里面讲到了如何使用Java 8的这个新特性。这个教程提供了一个MethodParameterSpy类,你可以用它来检测某个Java类的方法参数的属性。文中同时提及,将额外的参数信息存储在.class文件里面是一个可选的特性,因为这会增加class文件的大小。它同时还指出,有些情况下参数名内包含一些敏感信息,因此开发人员并不希望将它保存到编译后的.class文件中。 ...
译注:StaGen是一个功能极其简单的静态站点生成器,因此它非常容易上手,同时它还是用Java 8写的,有兴趣的话可以看下它的源代码。当然我个人还是比较喜欢Jekyll。 在没有StaGen之前,我一直都在用RapidWeaver来管理我的网站 WizTo ...
ORM已经过时了 最近几十年来,关于ORM究竟还有没有用的争论一直不断。很多人承认Hibernate和JPA确实很好的解决了不少实际的问题(通常是复杂对象的持久化),但有些人认为,对于面向数据的应用而言,复杂的映射关系则有点大材小用了。 JPA通过在目标类型上使用硬编码的注解,来建立标准的声明式的映射规则,进而完成映射关系。但我们认为,很多以数据为中心的应用不应该受限于注解的局限性,而应该通过一种函数式的方式来解决。Java 8的Steam API终于让我们可以用一种简洁的方式来解决这个问题了! 我们先从一个简单的例子开始,这里我们使用H2的INFORMATION\_SCHEMA来查询所有 ...
本系列文章译自Venkat Subramaniam的Functional Programming in Java 未完待续,后续文章请继续关注[url={{ site.url }}]Java译站[/url]。 前面我们已经用过几次collect()方法来将Stream返回的元素拼成ArrayList了。这是一个reduce操作,它对于将一个集合 ...
相信很多Java开发人员都对这个常见却不招人待见的java.lang.ClassNotFoundException并不陌生。出现这个异常的原因大家都清楚(classpath路径下缺少class文件或者jar包了,或者是类加载器委派的问题等),不过对于它给JVM带来的性能影响 ...
1. James Gosling 1983年,Gosling获得了加州大学的计算机科学学士学位。1990年,他获得了卡内基梅隆大学的计算机科学博士学位,师从Bob Sproull。在攻读博士期间,他自己开发了一款emacs,叫Gosling Emacs(Gosmacs),在大学的这段时间,他 ...
从Java7开始,switch语句增加了对String类型的支持。不过字节码中的switch指令还是只支持int类型,并没有增加对其它类型的支持。事实上switch语句对String的支持是分成两个步骤来完成的。首先,将每个case语句里的值的hashCode和操作数栈顶的值(译注:也就是switch里面的那个值,这个值会先压入栈顶)进行比较。这个可以通过lookupswitch或者是tableswitch指令来完成。结果会路由到某个分支上,然后调用String.equlals来判断是否确实匹配。最后根据equals返回的结果,再用一个tableswitch指令来路由到具体的case分支上去执行 ...
译注:Lombok是一个很老的项目了,也非常实用,但奇怪的是这么多年来似乎一直不温不火。本文只是简单介绍了它的一些基础功能。更多特性可以参考它的官网。 Lombok是一个旨在减少代码开发工作的Java库。本文介绍了如何用它来完成getter/setter方法,构造方法,以及重写equals(),hashCode()和toString()方法。在Java中,一个很简单的类却往往写得特别复杂。如果你没听说过Lombok的话,那它肯定会让你满意的。 Lombok可以帮助Java开发人员完成以下这些事情: 1. 不用再写setter/getter方法了 不用Lombok的话,我们通常都得这么写 ...
本系列文章译自Venkat Subramaniam的Functional Programming in Java 未完待续,后续文章请继续关注Java译站。 实现Comparator接口 Comparator接口的身影在JDK库中随处可见,从查找到排序,再到反转操作,等等。Java 8里它变成了一个函数式接口,这样的好处就是我们可以使用流式语法来实现比较器了。 我们用几种不同的方式来实现一下Comparator,看看新式语法的价值所在。你的手指头会感谢你的,不用实现匿名内部类少敲了多少键盘啊。 使用Comparator进行排序 下面这个例子将使用不同的比较方法,来将一组人进行排序。 ...
为什么会想到操作系统 大概一年以前,我有一个想法,就是基于不可变值实现OpenGL的渲染器。我把这个想法发到博客上了,并且在Hacker News和Reddit上得到了不少关注。还有些人甚至给我发来了邮件。 在吊床上思考了很长一段时 ...
Java 8最终还是发布了。现在终于有了标准的方法来处理base64的编解码。很长时间以来我们都得依赖于Apache Commons Codec(当然它也是相当棒的)。比较在乎内存开销的开发人员通常会单独使用sun.misc.BASE64Encoder和sun.misc.BASE64Decoder,这样避免了加载额外的JAR包到应用程序里面,当然前提是他们确定他们用的一定就是SUN/Oracle的JDK。这些类在Java 8里依然存在。 这里写了个JUnit测试程序来演示下如何使用这几种API来进行base64编码: Commons Codec: org.apache.commons.cod ...
条件语句 像if-else, switch这样的流程控制的条件语句,是通过用一个指令进行两个值的比较,然后根据结果跳转到另一条字节码来实现的。 循环语句包括for循环,while循环,它们的实现方式也很类似,但除了一点,它们通常都会 ...
明白Java代码是如何编译成字节码并在JVM上运行的非常重要,这有助于理解程序运行的时候到底发生了些什么。明白这个不仅能搞清语言特性是如何实现的,并且在做方案讨论的时候能知道相应的副作用及权衡利弊。 本文介绍了Java代码是如何编译成字节码并在JVM上执行的。想了解JVM的内部结构以及字节码运行时用到的各个内存区域,可以看下我前面的一篇关于JVM内部细节的文章。 本文分为三部分,每一部分都分成几个小节。每个小节都可以单独阅读,不过由于一些概念是逐步建立起来的,如果你依次阅读完所有章节会更简单一些。每一节都会覆盖到Java代码中的不同结构,并详细介绍了它们是如何编译成字节码并执行的。 1 ...
Global site tag (gtag.js) - Google Analytics