java1.8学习demo

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/liufang1991/article/details/73842850

大牛的源码: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<>()),但我的观点是同步集合效率已经变差了,我们一般在流中处理的时间并不是特别长,直觉上来讲效率还不如单线程好




猜你喜欢

转载自blog.csdn.net/liufang1991/article/details/73842850
今日推荐