java 8中的Lambda表达式(使用java.util.Optional在HashMap中进行空检查)

Rag*_*ghu 1 java lambda optional java-8

我是java 8的新手并且学习lambda表达式.

我有一个界面.

Configuration.java

package com.raghu.example;

import java.util.Map;


public interface Configuration {

    public Map<String,String> getPayload();

}
Run Code Online (Sandbox Code Playgroud)

Impl用于接口:ConfigurationImpl.java

package com.raghu.example;

import java.util.HashMap;
import java.util.Map;

public class ConfigurationImpl implements Configuration {

    @Override
    public Map<String, String> getPayload() {
        Map<String,String> map = new HashMap<>();
        map.put("key1", "value1");
        map.put("key2", "value2");
        //return null;
        return map;
    }

}
Run Code Online (Sandbox Code Playgroud)

我的主程序:Sample.java

package com.raghu.example;
import java.util.Optional;

public class Sample {

    Configuration config;

    /*
     * if config is null, return "";
     * if config.getPaylaod is null, return "";
     * if config.payload is not null and if key value is present, then return the value
     * if config.payload is not null and if invalid key, then return "";
     * 
     */

    String test(String key) {
        config = new ConfigurationImpl();
        String dataValue = "";

        /** java 7 
       if (StringUtils.isNotEmpty(key)) {
            try {
                String input= config.getPayload()==null?"":config.getPayloadmap().get(key);
                return (input!=null?input:"");
            } catch (Exception e) {
                return "";
            }
        }
        return "";
    }**/
        Optional.ofNullable(config).map(Configuration::getPayload).ifPresent(v->{final String str=v.get(key);System.out.println(str);});
//        //cdataValue=str;});
//        //Optional.ofNullable(config).map(Configuration::getPayload).ifPresent(v->{final String str=v.get(key);System.out.println(str);return str;});
       return dataValue;
    }

    public static void main(String[] args) {
       Sample s = new Sample();
       String value="";
       value=s.test("key"); //pass invalid , should return "";
       System.out.println(value);
       value=s.test("key1"); //pass invalid , should return actual value
       System.out.println(value);
    }

}
Run Code Online (Sandbox Code Playgroud)

现在在方法测试中,我想做以下[""].

  1. 检查config是否为null,返回空String.
  2. 检查collection是否为null,返回空字符串.
  3. 如果collection不为null,并且key存在,则返回值else return"";

如何在java 8中执行此操作?

试过这个:

  1. 错误1:Void方法无法返回值

    Optional.ofNullable(config).map(Configuration::getPayload).ifPresent(v->{final String str=v.get(key);System.out.println(str);return str;});
    
    Run Code Online (Sandbox Code Playgroud)
  2. 错误2:在封闭范围内定义的局部变量dataValue必须是最终的或有效的最终.

    Optional.ofNullable(config).map(Configuration::getPayload).ifPresent(v->{final String str=v.get(key);System.out.println(str);dataValue= str;});
    
    Run Code Online (Sandbox Code Playgroud)

添加final并没有解决.

还发布了java 7代码,我正在尝试用lambda表达式解决java 7的if-else部分.

Mis*_*sha 6

你可以继续链接.map(...).如果在任何步骤中发生null,它将使整个事物变为空Optional,然后orElse("")将返回默认值.

return Optional.ofNullable(config)
        .map(Configuration::getPayload)
        .map(c->c.get(key))
        .orElse("");
Run Code Online (Sandbox Code Playgroud)

  • @Clashsoft我不相信有这样的东西,比如`Map :: get(key)`.方法引用不能带参数. (4认同)
  • `c-> c.get(key)`可以替换为`Map :: get(key)`:) (3认同)