相关文章推荐
满身肌肉的包子  ·  SQL 高级查询 ...·  1 年前    · 
玩篮球的菠萝  ·  Can't ping docker ...·  1 年前    · 
发财的小马驹  ·  2d correlation ...·  2 年前    · 
private void printFruitType(String type) { if (Type.APPLE.getVal().equals(type)) { System.out.println(Type.APPLE.getVal()); if (Type.ORANGE.getVal().equals(type)) { System.out.println(Type.ORANGE.getVal()); if (Type.PEAR.getVal().equals(type)) { System.out.println(Type.PEAR.getVal()); if (Type.OTHER.getVal().equals(type)) { System.out.println(Type.OTHER.getVal()); @Test public void fruit() { List fruits = Lists.newArrayList("orange", "pear", "apple", "other"); // 回去随机的水果类型 int index = (int) (Math.random() * 4); printFruitType(fruits.get(index));

除了使用switch case语句之外还有lambda,下面来看lambda具体使用方法:

2、简单的lambda应用

    enum Type {
        APPLE("apple"),
        ORANGE("orange"),
        PEAR("pear"),
        OTHER("other");
        private final String type;
        Type(String type) {
            this.type = type;
        public String getVal() {
            return type;
     * 定义一个lambda 函数
    @FunctionalInterface
    interface Handler {
        void handler();
     * 注册水果类型和lambda方法
     * @return Map
    private Map<Type, Handler> register() {
        return new HashMap<Type, Handler>() {{
            putIfAbsent(Type.PEAR, () -> System.out.println("pear"));
            putIfAbsent(Type.ORANGE, () -> System.out.println("orange"));
            putIfAbsent(Type.APPLE, () -> System.out.println("apple"));
            putIfAbsent(Type.OTHER, () -> System.out.println("other"));
    @Test
    public void functionPrint(){
        Map<Type, Handler> handlerMap = register();
        List<String> fruits = Lists.newArrayList("orange", "pear", "apple", "other");
        // 获取随机的水果类型
        int index = (int) (Math.random() * 4);
        String type = fruits.get(index);
        System.out.println(type);
        handlerMap.get(Type.valueOf(type.toUpperCase()));
在Stream处理中,我们通常会遇到if/else的判断情况,对于这样的问题我们怎么处理呢?
还记得我们在上一篇文章lambda最佳实践中提到,lambda表达式应该越简洁越好,不要在其中写臃肿的业务逻辑。
接下来我们看一个具体的例子。
假如我们有一个1 to 10的list,我们想要分别挑选出奇数和偶数出来,传统的写法,我们会这样使用:
    public void inForEach(){
        List ints = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
                                    1、自己写代码实现1)return this的实现public MyClass ifExist(Consumer consumer) {if (exist()) {consumer.accept(this);}return this;}public MyClass ifNotExist(Consumer consumer) {if (!exist()) {consumer.accept(this)...
                                    使用Java 8,我有这样的代码:if(element.exist()){// Do something}我想转换为lambda风格,element.ifExist(el -> {// Do something});使用ifExist方法,如下所示:public void ifExist(Consumer consumer) {if (exist()) {consumer.accept(th...
                                    用Lambda表达式替换根据不同类型做判断的多 if 语句背景1、创建if条件的枚举类2、创建公共处理方法3、调用
根据不同类型,获取类似的处理结果。如果使用if做判断,则会造成代码冗余且不美观。
  public String getTagNum(String tagType, Integer dataClass, String tagNo) {
 		String[] type = {};
        if("typeA".equals(tagType)){
用lambda表达式去除过多的if else
在项目中在一个方法中过多的使用if else,一个复杂的业务可能会使用到6,7个if else,会影响代码的可读性,后期不利于维护,修改起来也很麻烦,例如:
 private int ifResult(String value, int param) {
        if(StringUtils.equals(value, "testA")...
函数式接口是JDK8的一个非常重要新特性,使用起来可以极大的简化代码。
函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。
函数式接口可以被隐式转换为 lambda 表达式。
1、四大函数式接口
消费型接口:Consumer
供给型接口:Supplier
函数型接口:Function
断言型接口:Predicate
2、处理异常
     * 异常处理接口