java8中lambda表达式用法再探

来源:互联网 发布:熟悉linux基本命令 编辑:程序博客网 时间:2024/06/06 08:55
/* * 版权信息:北京汉方三陆零科技有限公司</br> * Copyright ?2014-2015. All rights reserved.  京ICP备15000045号 */package com.lin.fund;import java.nio.charset.StandardCharsets;import java.nio.file.Files;import java.nio.file.Paths;import java.util.ArrayList;import java.util.Arrays;import java.util.List;import java.util.concurrent.Callable;import java.util.function.BiConsumer;import java.util.function.Consumer;import java.util.function.Supplier;import java.util.function.UnaryOperator;import java.util.stream.Stream;import org.apache.commons.lang3.builder.ReflectionToStringBuilder;import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;import org.junit.Test;/**************************************************************************** * com.lin.fund LambdaTest.java Created on 2015年12月15日 *  * @Author: linfenliang * @Description: * @Version: 1.0 ***************************************************************************/public class LambdaTest {    private static final Logger logger = LogManager.getLogger(LambdaTest.class);    @Test    public void test() {        System.out.println("---------logger 使用lambda后先判断是否打印,然后执行lambda-------");        Object obj = new Object();        logger.trace(()->{return toStr(obj);});        logger.info(toStr(obj));        }    String toStr(Object obj){        sleep(1000);        System.out.println("--------to str--------");        return ReflectionToStringBuilder.toString(obj);    }    private void sleep(int t) {        try {            Thread.sleep(t);        } catch (InterruptedException e) {            e.printStackTrace();        }            }    @Test    public void test1() {                    }    public void doIt(String str,UnaryOperator<String> fn){        fn.apply(str);    }    @Test    public void test2() {        doHandlerThrowable(() ->Integer.valueOf("aaaa"),() ->System.out.println("I am a good boy ,I will never do bad thing ."), t -> System.out.println("catch throwable:" + t));        doHandlerThrowable(()->{return Integer.valueOf("are you a good boy?");}, c->System.out.println("do supplier result:"+c), t -> System.out.println("catch throwable:" + t));        doHandlerThrowable(()->Integer.valueOf("12345v"), (c,t)->{System.out.println(c);System.out.println(t);});        String s = uncheck(() -> {String str = new String(Files.readAllBytes(Paths.get("E://t11est.txt")),StandardCharsets.UTF_8);return str;}).get();        System.out.println("read file:"+s);            }    void doHandlerThrowable(Runnable ra,Runnable rb,Consumer<Throwable> exceptionHandler){        new Thread(){            @Override            public void run() {                try {                    ra.run();                    rb.run();                } catch (Exception e) {//                  System.out.println("。。。:"+e);                    exceptionHandler.accept(e);                }            }        }.start();    }    <T> void doHandlerThrowable(Supplier<T> sa,Consumer<T> sb,Consumer<Throwable> exceptionHandler){        new Thread(){            @Override            public void run() {                try {                    T r = sa.get();                    sb.accept(r);                } catch (Exception e) {                    e.printStackTrace();                    exceptionHandler.accept(e);                }            }        }.start();    }    <T> void doHandlerThrowable(Supplier<? extends T> sa,BiConsumer<? super T, ? super Throwable> sb){        new Thread(){            @Override            public void run() {                T r = null;                Exception e = null;                try {                    r = sa.get();                } catch (Exception e1) {                    e = e1;                }                sb.accept(r, e);            }        }.start();    }    <T> Supplier<T> uncheck(Callable<? extends T> c){        return () -> {            try {                return c.call();            } catch (Exception e) {                e.printStackTrace();                throw new RuntimeException(e);            }        };    }    @Test    public void test3() {        Integer[] arr = Stream.of(1,2,3,4,5,6).toArray(Integer[]::new);        System.out.println(arr);    }    @Test    public void test4() {        Person [] arr = {new Person(),new Man(),new Man()};        //无法添加,可以取值        List<? extends Person> list1 = Arrays.asList(arr);        Person m = list1.get(0);        System.out.println(m);        //可添加,无法取值        List<? super Person> list2 = new ArrayList<>();        list2.add(new Man());        Object o = list2.get(0);        System.out.println("get value:"+o);            }    class Person{        @Override        public String toString() {            return ReflectionToStringBuilder.toString(this);        }    }    class Man extends Person{        @Override        public String toString() {            return ReflectionToStringBuilder.toString(this);        }    }}
0 0