`
deepinmind
  • 浏览: 451382 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
1dc14e59-7bdf-33ab-841a-02d087aed982
Java函数式编程
浏览量:41617
社区版块
存档分类
最新评论
文章列表
我们先来看一段代码: public static void main(String[] args) { if(Boolean.valueOf("true") == false) System.out.println("true == false"); } 你觉得这段代码的输出是什么?1. 什么也没有。 2. true == false.  3. 这可不好说。 选1的都是好孩子,直接选3的就请不要往下看了。选2的,只能说,你们太配合了。 其实这是源于stackoverflow很久前的一个 ...
时不时的我就会听见有人抱怨说,他的HotSpot JVM不停的在垃圾回收,可是每次回收完后堆却还是满的。当他们发现这是因为JVM的内存已经不够了之后,通常会问这么个问题,为什么JVM不抛一个OutOfMemoryError(OOME)呢?毕竟来说,由于内存不足,我的程序都已经没法继续跑了,对吧? 先说重要的,如果你运气好的话,你永远不会发现你的JVM其实在你身上下了个庞氏骗局的套。它会一直告诉你,你的内存是无限的,就只管去用就好了。JVM的垃圾回收器会一直维持这么个错觉,在内存这一亩三分地上,啥事都好着呢。 然而在这个领域里可不止这一个庞氏骗局而已。操作系统处理内存也是这么副德性。你会不停的 ...
本文主要讨论下不同的hashCode()的实现对应用程序的性能影响。 hashCode()方法的主要目的就是使得一个对象能成为hashMap的key或者存储到hashset中。这种情况下对象还得实现equals(Object)方法,它的实现和hashCode()必须是一致的: 如果a.equals(b)那么a.hashCode == b.hashCode() 如果hashCode()在同一个对象上被调用两次,它应该返回的是同一个值,这表明这个对象没有被修改过。 hashCode的性能 从性能的角度来看的话,hashCode()方法的最主要目标就是尽量让不同的对象拥有不同的hashC ...
本系列文章译自Venkat Subramaniam的Functional Programming in Java 未完待续,后续文章请继续关注[url={{ site.url }}]Java译站[/url]。 <h2>第三章 字符串,比较器和过滤器</h3> JDK引入的一些方法对写出函数式风格的代码很有帮助。JDK库里的一些的类和接口我们已经用得非常熟悉了,比如说String,为了摆脱以前习惯的那种 老的风格,我们得主动寻找机会来使用这些新的方法。同样,当我们需要用到只有一个方法的匿名内部类时,我们现在可以用lambda表达式来替换它了 ,不用再像原来那样写的那 ...
Junit中有好几种测试异常的方法。就像我在前面几篇文章中写道的那样,我比较喜欢使用org.junit.rules.ExpectedException规则。一般来说,ExpectedException规则是org.junit.Before, org.junit.After, org.junit.BeforeClass,或者org.junit.AfterClass注解的一种 ...
HotSpot,家喻户晓的JVM,我们的Java和Scala程序就运行在它上面。年复一年,一次又一次的迭代,经过无数工程师的不断优化,现在它的代码执行的速度和效率已经逼近本地编译的代码了。 它的核心是一个JIT(Just-In-Time)编译器。 ...
译注:map(映射)和reduce(归约,化简)是数学上两个很基础的概念,它们很早就出现在各类的函数编程语言里了,直到2003年Google将其发扬光大,运用到分布式系统中进行并行计算后,这个组合的名字才开始在计算机界大放异彩(那些函数式粉可能并不这么认为)。本文我们会看到Java 8在摇身一变支持函数式编程后,map和reduce组合的首次亮相(这里只是初步介绍,后续还会有针对它们的专题)。 本系列文章译自Venkat Subramaniam的Functional Programming in Java 未完待续,后续文章请继续关注Java译站。 对集合进行归约 现在为止我们已经介 ...
在Java中抛异常的性能是非常差的。通常来说,抛一个异常大概会消耗100到1000个时钟节拍。 通常是出现了意想不到的错误,我们才会往外抛异常。也就是说,我们肯定不希望一个进程一秒钟就抛出上千个异常。不过有时候你确实会碰到有些方法把异常当作事件一样往外抛。我们在这篇文章中已经看到一个这样的典范):sun.misc.BASE64Decoder之所以性能很差就是因为它通过抛异常来对外请求道,”我还需要更多的数据“: at java.lang.Throwable.fillInStackTrace(Throwable.java:-1) at java.lang.Throwable.fillIn ...
基础类型转化成String 在程序中你可能时常会需要将别的类型转化成String,有时候可能是一些基础类型的值。在拼接字符串的时候,如果你有两个或者多个基础类型的值需要放到前面,你需要显式的将第一个值转化成String(不然的话像System.out.println(1+'a')会输出98,而不是"1a")。当然了,有一组String.valueOf方法可以完成这个(或者是基础类型对应的包装类的方法),不过如果有更好的方法能少敲点代码的话,谁还会愿意这么写呢? 在基础类型前面拼接上一个空串(""+1)是最简单的方法了。这个表达式的结果就是一个Strin ...
本系列文章译自Venkat Subramaniam的Functional Programming in Java 未完待续,后续文章请继续关注Java译站。 选取单个元素 直觉来说选取单个元素肯定会比选取多个要简单得多,不过这里也存在一些问题。我们先看下一般的做法的问题是什么,然后再看下如何用lambda表达式来解决它。 我们先新建一个方法来查找一个以特定字母开头的元素,然后打印出来。 public static void pickName( final List<String> names, final String startingLetter) { Strin ...
使用词法作用域和闭包 很多开发人员都存在这种误解,认为使用lambda表达式会导致代码冗余,降低代码质量。恰恰相反,就算代码变得再复杂,我们也不会为了代码的简洁性而在代码质量上做任何妥协,下面我们就会看到。 在 ...
本文主要介绍Java中几种分配内存的方法。我们会看到如何使用sun.misc.Unsafe来统一操作任意类型的内存。以前用C语言开发的同学通常都希望能在Java中通过较底层的接口来操作内存,他们一定会对本文中要讲的内容感兴趣。 如果 ...
相信大家都对Java线程死锁的概念并不陌生。本质上就是有两个线程在互相等待。这通常都是flat锁(synchronized)或者 ReentrantLock的锁排列引起的问题。 Found one Java-level deadlock: ============================= "pool-1-thread-2": waitin ...
JDBC的保存点(Savepoint)是什么,如何使用? 有时候事务包含了一组语句,而我们希望回滚到这个事务的某个特定的点。JDBC的保存点可以用来生成事务的一个检查点,使得事务可以回滚到这个检查点。 一旦事务提交或者回滚了,它生成的任何保存点都会自动释放并失效。回滚事务到某个特定的保存点后,这个保存点后所有其它的保存点会自动释放并且失效。可以读下这个了解更多关于JDBC Savepoint的信息。 JDBC的DataSource是什么,有什么好处? DataSource即数据源,它是定义在javax.sql中的一个接口,跟DriverManager相比,它的功能要更强大。我们可 ...
本系列文章译自Venkat Subramaniam的Functional Programming in Java 未完待续,后续文章请继续关注Java译站。 查找元素 现在我们对这个设计优雅的转化集合的方法已经不陌生了,但它对查找元素却也是无能为力。不过filter方法却是为这个而生的。 我们现在要从一个名字列表中,取出那些以N开头的名字。当然可能一个也没有,结果可能是个空集合。我们先用老方法实现一把。 final List<String> startsWithN = new ArrayList<String>(); for(String name : ...
Global site tag (gtag.js) - Google Analytics