1.注解
Java 8在两个方面对注解机制进行了改进,分别为:
◆可以定义重复注解;
◆可以为任何类型添加注解。
Java中的注解是一种对程序元素进行配置,提供附加信息的机制(注意,在Java 8之前,只有声明可以被注解)。换句话说,它是某种形式的语法元数据(syntactic metadata)。
2.新的api
2.1.集合
2.2.Collections
Collections类的主要功能是操作或者返回集合。 Java 8中它新增了一个方法,该方法可以返回不可修改的、同步的、受检查的或者是空的NavigableMap或NavigableSet。还引入了checkedQueue方法,该方法返回一个队列视图,可以扩展进行动态类型检查。
2.3.Comparator
Comparator接口现在同时包含了默认方法和静态方法,Comparator.comparing返回一个Comparator对象,该对象提供了一个函数可以提取排序关键字。
◆ reversed—— 对当前的Comparator对象进行逆序排序, 并返回排序之后新的Comparator对象。
◆ thenComparing——当两个对象相同时,返回使用另一个Comparator进行比较的Comparator对象。
◆ thenComparingInt、 thenComparingDouble、 thenComparingLong—与thenComparing方法类似。
◆ comparingInt、 comparingDouble、 comparingLong—与comparing类似。
◆ naturalOrder—对Comparable对象进行自然排序,返回一个Comparator对象。
◆ nullsFirst、 nullsLast—对空对象和非空对象比较,可指定空对象比非空对象小或者大,返回Comparator对象。
◆ reverseOrder——和naturalOrder().reversed()方法类似。
2.4.并发
A.原子操作
java.util.concurrent.atomic包提供了多个对数字类型进行操作的类,这些类在Java8中新增了方法支持:
◆ getAndUpdate—以原子方式用给定的方法更新当前值,并返回变更之前的值。
◆ updateAndGet—以原子方式用给定的方法更新当前值,并返回变更之后的值。
◆ getAndAccumulate—以原子方式用给定的方法对当前及给定的值进行更新,并返回变更之前的值。
◆ accumulateAndGet—以原子方式用给定的方法对当前及给定的值进行更新,并返回变更之后的值。
B.Adder和Accumulator
多线程的环境中,如果多个线程需要频繁地进行更新操作,且很少有读取的动作,Java API文档中推荐大家使用新的类LongAdder、 LongAccumulator、Double-Adder以及DoubleAccumulator,尽量避免使用它们对应的原子类型。这些新的类在设计之初就考虑了动态增长的需求,可以有效地减少线程间的竞争。
C.ConcurrentHashMap
ConcurrentHashMap支持三种新的操作:
◆ forEach——对每个键值对进行特定的操作。
◆ reduce——使用给定的精简函数(reduction function),将所有的键值对整合出一个结果。
◆ search——对每一个键值对执行一个函数,直到函数的返回值为一个非空值。
以上每一种操作都支持四种形式,接受使用键、值、 Map.Entry以及键值对的函数:
◆ 使用键和值的操作(forEach、 reduce、 search)。
◆ 使用键的操作(forEachKey、 reduceKeys、 searchKeys)。
◆ 使用值的操作 (forEachValue、 reduceValues、 searchValues)。
◆ 使用Map.Entry对象的操作(forEachEntry、 reduceEntries、 searchEntries)。
ConcurrentHashMap类提供了mappingCount方法,它以长整型long返回map中映射的数目。
ConcurrentHashMap类还提供了一个KeySet的方法,以Set的形式返回ConcurrentHashMap的一个视图(对map的修改会反映在该Set中,反之亦然)。也可以使用新的静态方法newKeySet,由ConcurrentHashMap创建一个Set。
2.5.Arrays
parallelSort:以并发的方式对指定的数组进行排序;
setAll 和 parallelSetAll:使用提供的函数计算每一个元素的值,对指定数组中的所有元素进行设置;
parallelPrefix:以并发的方式,用用户提供的二进制操作符对给定数组中的每个元素进行累积计算;
2.6.Number
Number类中新增的方法如下。
◆ Short、 Integer、 Long、 Float和Double类提供了静态方法sum、 min和max;
◆ Integer和Long类提供了compareUnsigned、 divideUnsigned、 remainderUnsigned和toUnsignedLong方法来处理无符号数。
◆ Integer和Long类提供了静态方法parseUnsignedInt和parseUnsignedLong将字符解析为无符号int或者long类型。
◆ Byte和Short类提供了toUnsignedInt和toUnsignedLong方法通过无符号转换将参数转化为int或long类型 。
◆ Double和Float类提供了静态方法isFinite,可以检查参数是否为有限浮点数。
◆ Boolean类现在提供了静态方法logicalAnd、 logicalOr和logicalXor,在两个boolean执行and、 or和xor操作。
◆ BigInteger类提供了byteValueExact 、shortValueExact 、intValueExact 和longValueExact,可以将BigInteger类型的值转换为对应的基础类型。如果在转换过程中有信息的丢失,方法会抛出算术异常。
2.7.Math
Math中的方法在操作中出现溢出, Math类提供了新的方法可以抛出算术异常。支持这一异常的方法包括使用int和long参数的addExact、 subtractExact、 multipleExact、incrementExact、 decrementExact和negateExact。此外, Math类还新增了一个静态方法toIntExact,可以将long值转换为int值。其他的新增内容包括静态方法floorMod、floorDiv和nextDown。
2.8.Files
Files类可以用文件直接产生流。
◆ Files.lines—生成文件掏每行内容的流对象。
◆ Files.list—生成由指定目录中所有条目构成的Stream<Path>,这个列表不是递归包含的。
◆ Files.walk—生成包含给定目录中所有条目的Stream<Path>。这个列表是递归的,可以设定递归的深度。
◆ Files.find—通过递归地遍历一个目录找到符合条件的条目,并生成一个Stream<Path>对象。
2.9.Reflection
Relection接口新增了可以查询方法参数信息的API,可使用新增的Parameter类查询方法参数的名称和修饰符。
2.10.String
String类新增了一个静态方法join。可以用一个分隔符将多个字符串连接起来。
3.以并发方式在同一个流上执行多种操作
https://github.com/pingszi/JavaDemo.git
->jdk8->other