大牛的源码:http://git.oschina.net/benhail/javase8-sample
大牛的博客:http://my.oschina.net/benhaile/blog
下面是我在学习过程中综合网上写的一些demo
import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.script.ScriptException; public class JavaScriptTest { public static void main(String[] args){ ScriptEngineManager manager = new ScriptEngineManager(); ScriptEngine engine = manager.getEngineByName( "JavaScript" );//manager.getEngineByName("nashorn");效果是一样的 System.out.println( engine.getClass().getName() );//jdk.nashorn.api.scripting.NashornScriptEngine try { System.out.println( "Result:" + engine.eval( "function f() { return 1; }; f() + 1;" ) );//Result:2.0 } catch (ScriptException e) { e.printStackTrace(); } } }
//集成了Base64 import java.io.UnsupportedEncodingException; import java.nio.charset.StandardCharsets; import java.util.Base64; import java.util.UUID; public class Base64Test { public static void main(String[] args) { //basic 编码 final String text = "Base64 finally in Java 8!"; System.out.println("base64 basic text:"+ text); final String encoded = Base64.getEncoder().encodeToString(text.getBytes(StandardCharsets.UTF_8)); System.out.println("base64 basic encode result:"+ encoded ); final String decoded = new String(Base64.getDecoder().decode(encoded),StandardCharsets.UTF_8); System.out.println("base64 basic decode result:"+decoded); //url编码 try { String url="subjects?abcd"; System.out.println("base64 url text: " + url); String urlEncoded = Base64.getUrlEncoder().encodeToString(url.getBytes("utf-8")); System.out.println("base64 url encode result: " + urlEncoded); String urlDecoded=new String(Base64.getUrlDecoder().decode(urlEncoded),StandardCharsets.UTF_8); System.out.println("base64 url decode result: " + urlDecoded); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } //mime编码,使用基本的字母数字产生BASE64输出,每一行输出不超过76个字符,而且每行以“\r\n”符结束 try { StringBuilder sb = new StringBuilder(); for (int t = 0; t < 10; ++t) { sb.append(UUID.randomUUID().toString()); } System.out.println("base64 mime text: " + sb.toString()); String mimeEncoded = Base64.getMimeEncoder().encodeToString(sb.toString().getBytes("utf-8")); System.out.println("base64 mime encode result: " + mimeEncoded); String mimeDecoded=new String(Base64.getMimeDecoder().decode(mimeEncoded),StandardCharsets.UTF_8); System.out.println("base64 mime decode result: " + mimeDecoded); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } }
使用flatMap在编译的时候出现兼容错误,不兼容的类型: java.lang.Object无法转换为java.util.List
将List<List<MyClass>> arrs这样一个二维List对象打平为一维List
arrs.flatMap(x->x.stream()).collect(Collectors.toList()) 这样写会在编译的时候报不兼容错误,但arrs如果是一个List<List<Integer>>这样的对象就是正常的
arrs.flatMap(x->Arrays.stream(x.toArray())).collect(Collectors.toList()) 可以这样写
arrs.flatMap(List::stream).collect(Collectors.toList()) 推荐的最简单的写法
使用parallelStream的禁区
list1.stream().forEach(e->list2.add(e)) 这种情况下建议千万不要使用paralleStream,否则list2中会出现null并且元素顺序不确定还会丢失元素。
JAVA使用并行流(ParallelStream)时要注意的一些问题文章有说明原因
作者说将list2设为同步集合Collections.synchronizedList(new ArrayList<>()),但我的观点是同步集合效率已经变差了,我们一般在流中处理的时间并不是特别长,直觉上来讲效率还不如单线程好