java 8中的Lambda表达式(使用java.util. optional在HashMap中检查Null)



我刚开始学习java 8和lambda表达式。

我有一个接口

Configuration.java

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

public interface Configuration {
    public Map<String,String> getPayload();
}

Impl for interface: 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;
    }
}

My Main Program: 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);
    }
}

现在在方法测试中,我想做如下操作["]。

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

如何在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;});
    
  2. 错误2:在封闭作用域中定义的局部变量datvalue必须是final或有效final.

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

加final解决不了问题

还发布了java 7代码,我正试图解决java 7的if-else部分与lambda表达式。

您可以继续链接.map(...)。如果在任何一个步骤中出现null,它将把整个东西变成一个空的Optional,然后orElse("")将返回默认值。

return Optional.ofNullable(config)
        .map(Configuration::getPayload)
        .map(c->c.get(key))
        .orElse("");

最新更新