java8 update

/ Java / 0 条评论 / 481浏览
java轮子
https://github.com/looly/hutool
<dependency>
<groupId>com.xiaoleilu</groupId>
<artifactId>hutool</artifactId>
<version>X.X.X</version>
</dependency>

1. stream
http://my.oschina.net/kaishui/blog/743383
List<User> userList = new ArrayList<User>();
for (int i = 0; i < 10; i++) {
userList.add(new User("name" + i, "passowrd" + i, i));
}
List<String> nameList = userList.stream()
.filter(u -> null != u.getName() && u.getName().indexOf("name") >= 0) //过滤结果
.sorted((u1, u2) -> u1.getName().length() - u2.getName().length()) //排序
.map(u -> u.getName()) //提取
.collect(Collectors.toList());

//clazz stream
Stream<Clazz> clazzSteam = Stream.of(clazz, clazz2);
//clazz stream -> user stream 扁平化
Stream<User> allUserStream = clazzSteam.flatMap(c -> c.getUsers().stream());
2. 接口的默认方法
(默认方法使得开发者可以在 不破坏二进制兼容性的前提下,往现存接口中添加新的方法,即不强制那些实现了该接口的类也同时实现这个新加的方法)
private interface Defaulable {
// Interfaces now allow default methods, the implementer may or
// may not implement (override) them.
default String notRequired() {
return "Default implementation";
}
}
3. 获取参数名称
4. 空值v处理(Optional)
7.Base64支持(不需要使用第三方库就可以进行Base64编码)
新的Base64API也支持URL和MINE的编码解码
(Base64.getUrlEncoder() / Base64.getUrlDecoder(), Base64.getMimeEncoder() / Base64.getMimeDecoder())
Optional< String > fullName = Optional.ofNullable( null );
System.out.println( "Full Name is set? " + fullName.isPresent() );
System.out.println( "Full Name: " + fullName.orElseGet( () -> "[none]" ) );
System.out.println( fullName.map( s -> "Hey " + s + "!" ).orElse( "Hey Stranger!" ) );
5. Joda-Time新的时间日期函数库
LocalDateLocalTime
Duration类,它持有的时间精确到秒和纳秒。这使得我们可以很容易得计算两个日期之间的不同

6. Nashorn JavaScript引擎(允许Java和JavaScript交互使用)
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName( "JavaScript" );
System.out.println( engine.getClass().getName() );
System.out.println( "Result:" + engine.eval( "function f() { return 1; }; f() + 1;" ) );
jjs是一个基于标准Nashorn引擎的命令行工具

Method method = ParameterNames.class.getMethod( "main", String[].class );
for( final Parameter parameter: method.getParameters() ) {
System.out.println( "Parameter: " + parameter.getName() );
}
在Java 8中这个特性是默认关闭的,因此如果不带-parameters参数编译上述代码并运行,则会输出如下结果:
Parameter: arg0
如果带-parameters参数,则会输出如下结果(正确的结果):
Parameter: args
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<compilerArgument>-parameters</compilerArgument>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
8. 类依赖分析器jdeps
它以.class文件、目录或者Jar文件为输入,然后会把依赖关系输出到控制台

9. 使用MetaspaceJEP 122)代替持久代(PermGen space)
在JVM参数方面,使用-XX:MetaSpaceSize-XX:MaxMetaspaceSize代替原来的-XX:PermSize-XX:MaxPermSize