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
- java8中lambda表达式用法再探
- java8中lambda表达式
- java8 中Lambda表达式
- JAVA8中Lambda表达式入门
- Java8中Lambda表达式学习
- Java8中Lambda的用法
- java8中Lambda表达式的使用
- JAVA8-LAMBDA中reduce的用法
- Java8 Lambda表达式教程
- Java8 Lambda表达式教程
- Java8: Lambda表达式语法
- java8 Lambda表达式
- Java8 Lambda表达式教程
- Java8 Lambda表达式
- java8 Lambda表达式
- Java8 Lambda表达式教程
- Java8 Lambda表达式教程
- Java8 Lambda表达式教程
- Hive基础知识补遗
- paxos算法学习总结
- java8 stream API学习测试用例
- java8 日期time测试用例以及结果分析
- linux基本命令
- java8中lambda表达式用法再探
- 日志记录规范
- OpenCV学习笔记(六)离散傅里叶变换
- 第十五周项目—字符串插入
- JavaSE集合框架总结
- javaSe中 面试问的问题
- 【内部类】局部内部类及应用
- [LeetCode]Compare Version Numbers
- 光标的合理形状应该怎样?