java1.8學習demo
大牛的原始碼: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 = newScriptEngineManager(); 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 voidmain(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<>()),但我的觀點是同步集合效率已經變差了,我們一般在流中處理的時間並不是特別長,直覺上來講效率還不如單執行緒好