guava之Lists.Maps 谷歌提供了guava包里面有很多的工具类,Lists和Maps集合工具,集合操作做了些优化提升 一.概述 1.静态工厂方法 (1)Guava提供了能够推断泛型的静态工厂方法 List<Person>   list = Lists.newArrayList(); Map<keyType,Person> map = Maps.newLinkedHashMap(); (2)用工厂方法模式,我们可以方便地在初始化时就指定起始元素 Set(Type)  c…
Java8 函数式接口 之前写了有关JDK8的Lambda表达式:java代码之美(1)---Java8 Lambda 函数式接口可以理解就是为Lambda服务的,它们组合在一起可以让你的代码看去更加简洁. 一.概念 1.什么是函数式接口 概念 所谓的函数式接口, 当然首先是一个接口, 然后就是在这个接口里面 只能有一个抽象方法. 有关函数式接口,有个专门的注解叫:@FunctionalInterface.该注解主要特点有: 1.该注解只能标记在"有且仅有一个抽象方法"的接口上,表示函…
Java8 Function.Consumer.Supplier 有关JDK8新特性之前写了三篇博客: 1.java代码之美(1)---Java8 Lambda 2.java代码之美(2)---Java8 Stream 3.java代码之美(13)--- Predicate详解 这一篇我们来了解JDK8已经定义好的几个函数式接口. 一.概述 Jdk8之后新增的一个重要的包 : java.util.function 该包下所有的接口都是函数式接口, 按分类主要分为四大接口类型: Function.…
guava之Lists.Maps 谷歌提供了guava包里面有很多的工具类,Lists和Maps集合工具,集合操作做了些优化提升. 1.概述 1.静态工厂方法 (1)Guava提供了能够推断范型的静态工厂方法 List<Person> list = Lists.newArrayList(); Map<KeyType, Person> map = Maps.newLinkedHashMap(); (2) 用工厂方法模式,我们可以方便地在初始化时就指定起始元素. Set<Type…
guava 复写Object常用方法 Guava 是一个 Google 的基于java1.6的类库集合的扩展项目,这个库提供用于集合,缓存,支持原语,并发性,常见注解,字符串处理,I/O和验证的实用方法. 这些高质量的 API 可以使你的Java代码更加优雅,更加简洁,让你工作更加轻松愉悦. 一.概述 在Java中Object类是所有类的父类,其中有几个需要override的方法比如equals,hashCode和toString等方法.每次写这几个方法都要做很多重复性的判断, 很多类库提供了覆…
java代码的优化 随着自己做开发时间的增长,越来越理解雷布斯说的: 敲代码要像写诗一样美.也能理解有一次面试官问我你对代码有洁癖吗? 一段好的代码会让人看就像诗一样,也像一个干净房间会让人看去很舒服. 一段好的项目代码我觉得可以用这三个维度去分析.1)性能 2)可扩展性3)可读性 有关代码的规范早在很久就有阿里巴巴的java开发手册,里面有非常多的规范.太多了,自己也没完全记住,抽空也会时不时再去翻翻. 接下来就写一些有关性能和可读性一些习惯,不全以后想到什么会再补充进来. 一.性能考虑 1.…
guava复写Object常用方法 Guava是一个Google的基于java1.6的类库集合的扩展项目,这个库提供用于集合,缓存,支持原语,并发性,字符串处理,I/O和验证的实用方法, 这些高质量的API可以使你的Java代码更加优雅,更加简洁,让你工作更加轻松愉悦 一.概述 在Java中Object类是所有类的父类,其中有几个需要override的方法比如:equals,hashCode和tostring等方法,每次写这几个方法都要做很多重复性的判断 很多类库提供了覆写这几个方法的工具类,G…
guava字符串工具 在java开发过程中对字符串的处理是非常频繁的,google的guava工具对字符串的一些处理进行优化,使我们开发过程中让自己的代码看去更加美观,清爽. 一.Joiner 根据给定的分隔符把字符串连接到一起.MapJoiner 执行相同的操作,但是针对 Map 的 key 和 value. 分析源码可知:该类构造方法被private修身,无法直接通过new实现,通过调用on传如分隔符来得到实例. 案例 public class JoinerTest { public sta…
Immutable(不可变)集合 一.概述 guava是google的一个库,弥补了java语言的很多方面的不足,很多在java8中已有实现,暂时不展开.Collections是jdk提供的一个工具类. Guava中不可变对象和Collections工具类的unmodifiableSet/List/Map/etc的区别: 当Collections创建的不可变集合的wrapper类改变的时候,不可变集合也会改变,而Guava的Immutable集合保证确实是不可变的. 1.JDK中实现immuta…
guava之Bimap bimap的作用很清晰:它是一个一一映射,可以通过key得到value,也可以通过value得到key. 一.概述 1.bimap和普通HashMap区别 (1)在Java集合类库中的Map,它的特点是存放的键(Key)是唯一的,而值(Value)可以不唯一,而 bimap要求key和value都唯一,如果key不唯一则覆盖key,如果value不唯一则直接报错. 2.案例展示 public class bimapTest { public static void mai…
guava之multimap 上一篇讲到Multiset它可以对存入相同元素做一个计数的功能,那multimap呢? 一.概述 1.基本介绍和案例说明 multimap和MultiSet的继承结果很相似,只不过在上层的接口是Multimap不是Multiset. Multimap的特点其实就是可以包含有几个重复Key的value,你可以put进入多个不同value但是相同的key,但是又不是让后面覆盖前面的内容. 它的业务场景:当你需要构造像Map<K, List<V>>或者Map…
guava之Multiset 一.概述 Guava提供了一个新集合类型Multiset,它可以多次添加相等的元素,且和元素顺序无关.Multiset继承于JDK的Cllection接口,而不是Set接口.它和set最大的区别就是 它可以对相同元素做一个计数的功能,普通的 Set 就像这样 :[car, ship, bike],而 Multiset 会是这样 : [car x 2, ship x 6, bike x 3]Multiset有一个有用的功能, 就是跟踪每种对象的数量,所以你可以用来进行…
java代码之美(13)--- Predicate详解 遇到Predicate是自己在自定义Mybatis拦截器的时候,在拦截器中我们是通过反射机制获取对象的所有属性,再查看这些属性上是否有我们自定义的UUID注解. 如果有该注解,那么就给该属性赋值UUID随机字符串,作为主键保存到数据库.所以前提条件就是获取带有UUID注解的属性,就需要用到Predicate. //获取所有带UUID注解的属性 Set<Field> allFields = ReflectionUtils.getFields…
java代码之美(12)---CollectionUtils工具类 这篇讲的CollectionUtils工具类是在apache下的, 而不是springframework下的CollectionUtils. 个人觉得CollectionUtils在真实项目中,可以使你的代码更加简洁和安全. 所以需要倒入相关jar包,目前从maven找到最新jar包如下: <dependency> <groupId>org.apache.commons</groupId> <ar…
Map中的computeIfAbsent方法 Map接口的实现类如HashMap,ConcurrentHashMap,HashTable等继承了此方法,通过此方法可以在特定需求下,让你的代码更加简洁. 一.案例说明 1.概述 在JAVA8的Map接口中,增加了一个方法computeIfAbsent,此方法签名如下: public V computeIfAbsent(K key, Function<? super K,? extends V> mappingFunction) 此方法首先判断缓存…
Immutable(不可变)集合   一,概述 guava是google的一个库,弥补了java语音的很多方面的不足,很多在java8中已有实现,暂时不展开,Collections是jdk提供的一个工具类 Guava中不可变对象和Collections工具类的unmodifiableSet/List/Map/etc的区别: 当Collections创建的不可变集合的wrapper类改变的时候,不可变集合也会改变,而Guava的Immutable集合保证确实是不可变的. 1.jdk中实现immut…
Stream 第一次看到Stream表达式就深深把我吸引,用它可以使你的代码更加整洁而且对集合的操作效率也会大大提高,如果你还没有用到java8的Stream特性,那就说明你确实out啦. 一.概述 1.什么是Stream Stream是一种可供流式操作的数据视图有些类似数据库中视图的概念它不改变源数据集合如果对其进行改变的操作它会返回一个新的数据集合. 总的来讲它有三大特性:在之后我们会对照着详细说明        1.stream不存储数据        2.stream不改变源数据    …
Lambda 一.概述 1.什么是Lambda表达式 Lambda 表达式是一种匿名函数,简单地说,它是没有声明的方法,也即没有访问修饰符.返回值声明和名字. 它可以写出更简洁.更灵活的代码.作为一种更紧凑的代码风格,使 Java 语言的表达能力得到了提升. 2.Lambda表达式的语法 基本语法:  (parameters) -> expression 或者:(parameters) ->{ statements; 举例说明: // 1. 不需要参数,返回值为 5 () -> 5 //…
Java8 Optional 一句话介绍Optional类:使用JDK8的Optional类来防止NullPointerException(空指针异常)问题. 一.前言 在我们开放过程中,碰到的异常中NullPointerException必然是排行第一的.所以在平时编码中,我们会时时的判断null. public void saveCity(City city) { if (city != null) { String cityName = city.getCityName(); if (ci…
guava之Bimap bimap的作用很清晰:它是一个——映射,可以通过key得到value,也可以通过value得到key 一.概述 1.bimap和普通HashMap区别 (1)在java集合类库中的Map,它的特点是存放的键(key)是唯一的,而值(value)可以不唯一,而 bimap要求key和value都唯一,如果key不唯一则覆盖key,如果value不唯一则直接报错. 2.案例展示 public class BiMapTest { public static void main…
guava之multimap 上一篇说的是Multiset它可以对存入的相同元素做一个计数的功能,那multimap呢? 一.概述 1.基本介绍和案例说明 multimap和Multiset的继承结果很相似,只不过在上层的接口是Multimap不是Multiset Multimap的特点其实就是可以包含有几个重复key的value值,你可以put进多个不同的value,但是key相同,但是又不是让后面的覆盖前面的内容 它的业务场景:当你需要构造像Map<K,List<V>> 或者M…
Java8 LocalDateTime 在java8之前我们在处理时间的时候都是用的Date,但它其实有很明显的缺点. 1.我们也会对日期做一些操作,比如加几天.加几分,当月的最后一天等等.有些计算实现比较复杂. 2.也会用SimpleDateFormat来格式化日期.但SimpleDateFormat是线程不安全的. 所以现在一般都推荐使用LocalDateTime 它是线程安全的,并且性能更好,代码更简洁. 一.示例 新时间日期API常用.重要对象主要有下面三个: LocalDate : 只…
guava字符串工具 一.Joiner 根据指定的分隔符把字符串连接在一起,MapJoiner执行相同的操作,但是针对Map的key和value 分析源码可知:该类构造方法被private修饰,无法直接通过new 实现,通过调用on传入分隔符来得到实现 案例 public class JoinerTest { public static void main(String args[]){ //1.将list字符串集合,以,形式转为字符串 List<String> list =new Array…
guava之Multiset  一.概述 Guava提供了一个新集合类型Multiset,它可以多次添加相等的元素,且和元素顺序无关,Multiset继承于JDK的Collection接口,而不是Set接口,它和set最大的区别就是 它可以对相同元素做一个计数的功能,普通的Set就像:[car,ship,bike],而Multiset会是这样:[car x 2,ship x 6,bike x 3]有这样有用的功能 就是跟踪每种对象的数量,所以你可以用来进行数字统计,每存放一个元素,那么该元素的c…
文章转载自:http://my.oschina.net/leejun2005/blog/172328 目录:[ - ] 1-使用 GOOGLE COLLECTIONS,GUAVA,STATIC IMPORTS 编写漂亮代码 1.Google Collections一览 2.操作lists和maps 3.静态导入和Eclipse模板 4.Guava走马观花 2-深入探索 GOOGLE GUAVA 库 1.The Guava CharMatcher 2.Joiner and Splitter 3.W…
文章转载自:http://my.oschina.net/leejun2005/blog/172328 1.使用Google Collections,Guava,static imports编写漂亮代码   以前在一个项目中用到过guava,当时匆匆用,也没细研究,今天偶然在occhina看到这个系列教程的翻译,感觉不错,介绍得还比较全面,就一口气全看完了,但看到第四节,发现还没翻译,于是自己就硬着头皮看了英文,发现也能看懂大概意思,就顺手翻译了一下,也算是为开源事业做点儿贡献吧.把文章转到自己博…
目录 Guava中Lists.partition(List, size) 方法懒划分/懒分区 背景 分析 总结 Guava中Lists.partition(List, size) 方法懒划分/懒分区 背景 前几天有同事使用这个方法,不小心点进去查看源码,源码如下,然他通过idea工具debug发现执行完Lists.partition(List, size)这一行直接就现实了个size大小如下图:看了源码后根本就没有显示的调用size这些啊,就在那思考不知道为什么? Lists.partition…
Java代码规范 本Java代码规范以SUN的标准Java代码规范为基础,为适应我们公司的实际需要,可能会做一些修改.本文档中没有说明的地方,请参看SUN Java标准代码规范.如果两边有冲突,以SUN Java标准为准. 1. 标识符命名规范 1.1 概述 标识符的命名力求做到统一.达意和简洁. 1.1.1 统一 统一是指,对于同一个概念,在程序中用同一种表示方法,比如对于供应商,既可以用supplier,也可以用provider,但是我们只能选定一个使用,至少在一个Java项目中保持统一.统…
英文原文:LinkedIn Feed: Faster with Less JVM Garbage 最近在刷各大公司的技术博客的时候,我在Linkedin的技术博客上面发现了一篇很不错博文.这篇博文介绍了Linkedin信息流中间层Feed Mixer,它为Linkedin的Web主页,大学主页,公司主页以及客户端等多个分发渠道提供支撑(如下图所示). 在Feed Mixer里面用到了一个叫做SPR(念“super”)的库.博文讲的就是如何优化SPR的java代码.下面就是他们总结的优化经验. 1…
JDK8提供了非常多的便捷用法和语法糖,其编码效率几乎接近于C#开发,maven则是java目前为止最赞的jar包管理和build工具,这两部分内容都不算多,就合并到一起了. 愿编写java代码的过程如:Fast & Furious 鸟枪换炮咯,走起!J Java 7发布于2011年,Java 8发布于2014年,Java 9还远么? 在javase8中,lambda表达式的形式基本好C#中一致,Stream和LINQ类似,Future<T>和Task<T>类似,可以这样说…