博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
jdk1.8新特性 lambda Optional 备忘记录
阅读量:2072 次
发布时间:2019-04-29

本文共 9224 字,大约阅读时间需要 30 分钟。

1.lambda实用例子整理

import java.io.Serializable;import java.util.Arrays;import java.util.List;import java.util.Optional;import java.util.stream.Collector;import java.util.stream.Collectors;public class LambdaTest {    public static void main(String[] args) {        lambda1();//按年龄排序List        System.out.println("=======================================");        lambda2();//遍历list 方法1        System.out.println("=======================================");        lambda3();//遍历list 方法2        System.out.println("=======================================");        lambda4();//筛选年龄大与20的所有人        System.out.println("=======================================");        lambda5();//筛选年龄大与20的第一人    }    private static void lambda5() {        List
personList = Arrays.asList(new Person("张三",21,true),new Person("李四",14,true),new Person("王五",21,true)); Optional
newPerson = personList.stream().filter(item -> item.getAge() > 20).findFirst(); newPerson.ifPresent(item -> System.out.println(item.getName())); } private static void lambda4() { List
personList = Arrays.asList(new Person("张三",21,true),new Person("李四",14,true),new Person("王五",21,true)); List
newList = personList.stream().filter(item -> item.getAge() > 20).collect(Collectors.toList()); newList.forEach(item -> System.out.println(item.getName())); } private static void lambda3() { List
list = Arrays.asList("123","456","dongbao"); list.forEach(LambdaTest::doSomeThing); } private static void lambda2() { List
list = Arrays.asList("123","456","dongbao"); list.forEach(item -> doSomeThing(item)); } private static void doSomeThing(String item) { System.out.println(item); } private static void lambda1() { List
personList = Arrays.asList(new Person("张三",21,true),new Person("李四",14,true),new Person("王五",21,true)); System.out.println("Before Sort================="); for (Person person:personList){ System.out.println(person); } //年龄按照从小到大 //personList.sort((Person p1,Person p2)->p1.getAge()-p2.getAge()); personList.sort((Person p1,Person p2)->{ if (p2.getAge() == p1.getAge()){ return p1.getName().compareTo(p2.getName()); }else{ return Integer.compare(p1.getAge(),p2.getAge()); } }); System.out.println("After Sort=================="); for (Person person:personList){ System.out.println(person); } } public static class Person implements Serializable { private String name; private int age; private boolean flag; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public boolean isFlag() { return flag; } public void setFlag(boolean flag) { this.flag = flag; } public Person(){} public Person(String name, int age, boolean flag) { this.name = name; this.age = age; this.flag = flag; } @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + ", flag=" + flag + '}'; } }}

2.Optional简介

方法 描述
of 把指定的值封装为Optional对象,如果指定的值为null,则抛出NullPointerException
empty 创建一个空的Optional对象
ofNullable 把指定的值封装为Optional对象,如果指定的值为null,则创建一个空的Optional对象
get 如果创建的Optional中有值存在,则返回此值,否则抛出NoSuchElementException
orElse 如果创建的Optional中有值存在,则返回此值,否则返回一个默认值
orElseGet 如果创建的Optional中有值存在,则返回此值,否则返回一个由Supplier接口生成的值
orElseThrow 如果创建的Optional中有值存在,则返回此值,否则抛出一个由指定的Supplier接口生成的异常
filter 如果创建的Optional中的值满足filter中的条件,则返回包含该值的Optional对象,否则返回一个空的Optional对象
map 如果创建的Optional中的值存在,对该值执行提供的Function函数调用
flagMap 如果创建的Optional中的值存在,就对该值执行提供的Function函数调用,返回一个Optional类型的值,否则就返回一个空的Optional对象
isPresent 如果创建的Optional中的值存在,返回true,否则返回false
ifPresent 如果创建的Optional中的值存在,则执行该方法的调用,否则什么也不做
import java.util.Optional;public class OptinalTest {    public static void main(String[] args) {        System.out.println("Optinal of");        try {            of();        }catch (Exception e){        }        System.out.println("=========================");        System.out.println("Optinal ofNullable");        try {            ofNullable();        }catch (Exception e){        }        System.out.println("=========================");        System.out.println("Optinal empty");        try {            empty();        }catch (Exception e){        }        System.out.println("=========================");        System.out.println("Optinal get");        try {            get();        }catch (Exception e){        }        System.out.println("=========================");        System.out.println("Optinal orElse");        try {            orElse();        }catch (Exception e){        }        System.out.println("=========================");        System.out.println("Optinal orElseGet");        try {            orElseGet();        }catch (Exception e){        }        System.out.println("=========================");        System.out.println("Optinal orElseThrow");        try {            orElseThrow();        }catch (Exception e){        }        System.out.println("=========================");        System.out.println("Optinal filter");        try {            filter();        }catch (Exception e){        }        System.out.println("=========================");        System.out.println("Optinal map");        try {            map();        }catch (Exception e){        }        System.out.println("=========================");        System.out.println("Optinal flagmap");        try {            flagmap();        }catch (Exception e){        }        System.out.println("=========================");        System.out.println("Optinal ifpresent");        try {            ifpresent();        }catch (Exception e){        }    }    private static void ifpresent() {        //ifPresent方法的参数是一个Consumer的实现类,Consumer类包含一个抽象方法,该抽象方法对传入的值进行处理,只处理没有返回值。        Optional
stringOptional = Optional.of("zhangsan"); stringOptional.ifPresent(e-> System.out.println("我被处理了。。。"+e)); } private static void flagmap() { //map方法中的lambda表达式返回值可以是任意类型,在map函数返回之前会包装为Optional。 //但flatMap方法中的lambda表达式返回值必须是Optionl实例 Optional
stringOptional = Optional.of("zhangsan"); System.out.println(stringOptional.flatMap(e -> Optional.of("lisi")).orElse("失败")); stringOptional = Optional.empty(); System.out.println(stringOptional.flatMap(e -> Optional.empty()).orElse("失败")); } private static void map() { //如果创建的Optional中的值存在,对该值执行提供的Function函数调用 //map方法执行传入的lambda表达式参数对Optional实例的值进行修改,修改后的返回值仍然是一个Optional对象 Optional
stringOptional = Optional.of("zhangsan"); System.out.println(stringOptional.map(e -> e.toUpperCase()).orElse("失败")); stringOptional = Optional.empty(); System.out.println(stringOptional.map(e -> e.toUpperCase()).orElse("失败")); } private static void filter() { //如果创建的Optional中的值满足filter中的条件,则返回包含该值的Optional对象,否则返回一个空的Optional对象 Optional
stringOptional = Optional.of("zhangsan"); System.out.println(stringOptional.filter(e -> e.length() > 5).orElse("王五")); stringOptional = Optional.empty(); System.out.println(stringOptional.filter(e -> e.length() > 5).orElse("lisi")); } private static void orElseThrow() { //如果创建的Optional中有值存在,则返回此值,否则抛出一个由指定的Supplier接口生成的异常 Optional
stringOptional = Optional.of("张三"); System.out.println(stringOptional.orElseThrow(CustomException::new)); Optional
emptyOptional = Optional.empty(); System.out.println(emptyOptional.orElseThrow(CustomException::new)); } private static class CustomException extends RuntimeException { private static final long serialVersionUID = -4399699891687593264L; public CustomException() { super("自定义异常"); } public CustomException(String message) { super(message); } } private static void orElseGet() { //如果创建的Optional中有值存在,则返回此值,否则返回一个由Supplier接口生成的值 Optional
stringOptional = Optional.of("张三"); System.out.println(stringOptional.orElseGet(() -> "zhangsan")); Optional
emptyOptional = Optional.empty(); System.out.println(emptyOptional.orElseGet(() -> "orElseGet")); } private static void orElse() { //如果创建的Optional中有值存在,则返回此值,否则返回一个默认值 Optional
stringOptional = Optional.of("张三"); System.out.println(stringOptional.orElse("zhangsan")); Optional
emptyOptional = Optional.empty(); System.out.println(emptyOptional.orElse("李四")); } private static void get() { //如果我们创建的Optional对象中有值存在则返回此值,如果没有值存在,则会抛出NoSuchElementException异常。 Optional
stringOptional = Optional.of("张三"); System.out.println(stringOptional.get()); Optional
emptyOptional = Optional.empty(); System.out.println(emptyOptional.get()); } private static void empty() { //创建一个空的String类型的Optional对象 Optional
emptyOptional = Optional.empty(); } private static void ofNullable() { //为指定的值创建Optional对象,不管所传入的值为null不为null,创建的时候都不会报错 Optional
nullOptional1 = Optional.ofNullable(null); Optional
nullOptional2 = Optional.ofNullable("lisi"); } private static void of() { //创建一个值为张三的String类型的Optional Optional
ofOptional = Optional.of("张三"); ofOptional.ifPresent(item -> System.out.println(item)); //如果我们用of方法创建Optional对象时,所传入的值为null,则抛出NullPointerException如下图所示 Optional
nullOptional = Optional.of(null); }}

 

转载地址:http://rupmf.baihongyu.com/

你可能感兴趣的文章
【selenium】selenium ide的安装过程
查看>>
【手机自动化测试】monkey测试
查看>>
【英语】软件开发常用英语词汇
查看>>
Fiddler 抓包工具总结
查看>>
【雅思】雅思需要购买和准备的学习资料
查看>>
【雅思】雅思写作作业(1)
查看>>
【雅思】【大作文】【审题作业】关于同不同意的审题作业(重点)
查看>>
【Loadrunner】通过loadrunner录制时候有事件但是白页无法出来登录页怎么办?
查看>>
【English】【托业】【四六级】写译高频词汇
查看>>
【托业】【新东方全真模拟】01~02-----P5~6
查看>>
【托业】【新东方全真模拟】03~04-----P5~6
查看>>
【托业】【新东方托业全真模拟】TEST05~06-----P5~6
查看>>
【托业】【新东方托业全真模拟】TEST09~10-----P5~6
查看>>
【托业】【新东方托业全真模拟】TEST07~08-----P5~6
查看>>
solver及其配置
查看>>
JAVA多线程之volatile 与 synchronized 的比较
查看>>
Java集合框架知识梳理
查看>>
笔试题(一)—— java基础
查看>>
Redis学习笔记(三)—— 使用redis客户端连接windows和linux下的redis并解决无法连接redis的问题
查看>>
Intellij IDEA使用(一)—— 安装Intellij IDEA(ideaIU-2017.2.3)并完成Intellij IDEA的简单配置
查看>>