1. 程式人生 > >java1.8學習demo

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 = 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<>()),但我的觀點是同步集合效率已經變差了,我們一般在流中處理的時間並不是特別長,直覺上來講效率還不如單執行緒好