当前位置: 首页 > 知识库问答 >
问题:

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

秦时铭
2023-03-14

我是Java8的新手,正在学习lambda表达式。

我有接口。

package com.raghu.example;

import java.util.Map;


public interface Configuration {

    public Map<String,String> getPayload();

}
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;
    }

}
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. 检查配置是否为空,返回空字符串。
  2. 检查集合是否为空,返回空字符串。
  3. 如果collection不为null,并且key存在,则返回值else return“”;

在Java8中如何做到这一点?

试过这个:

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

也发布了Java7代码,我试图用lambda表达式解决Java7的if-else部分。

共有1个答案

钱元徽
2023-03-14

您可以继续链接.map(...)。如果在任一步骤中发生null,它只会将整个过程变成一个空的可选的,然后orelse(“”)将返回默认值。

return Optional.ofNullable(config)
        .map(Configuration::getPayload)
        .map(c->c.get(key))
        .orElse("");
 类似资料:
  • 1 Java8 Lambda表达式的介绍 Lambda表达式是Java8中包含的一项新的重要功能。它提供了一种简洁明了的方式来使用表达式表示一个方法接口。在Collection集合中非常有用。它有助于集合元素的迭代,过滤和从集合中提取数据。 Lambda表达式用于提供具有功能接口的接口的实现。它节省了大量代码。在使用Lambda表达式的情况下,我们无需再次定义用于提供实现的方法。我们只编写实现代码

  • 如果我更改了方法的名称,它会进行编译,但它不会重写toString,因此print方法不会打印预期的内容。 这是试图定义一个日志子系统,该子系统仅在需要时(当它真的要打印时)对lambda求值,但与非lambda参数兼容。我知道其他的方法来实现它,但我想知道为什么我不能这样做,如果有一个变通办法或我做错了什么,

  • 本文向大家介绍Java8中Lambda表达式使用和Stream API详解,包括了Java8中Lambda表达式使用和Stream API详解的使用技巧和注意事项,需要的朋友参考一下 前言 Java8 的新特性:Lambda表达式、强大的 Stream API、全新时间日期 API、ConcurrentHashMap、MetaSpace。总得来说,Java8 的新特性使 Java 的运行速度更快、

  • 我最近接触了Java8,我正在尝试学习Lambda表达式。我想做一些图形计算,我的代码到目前为止: 所有这些代码都是用于图形的,除了和使用的操作之外,所有内容都是基本的数学(加、减、乘、模),并且可以单独针对每个像素执行。 现在的问题是:有可能在GPU上运行这个吗?或者这甚至是自动基于GPU的?(我记得在什么地方读到过这个,但我不确定)

  • 检查d1是否正确的最佳方法是什么。getDept()和d2。在进行比较之前,getDept()在以下lambda中是否为null?空检查应该在集合之前完成吗。sort()还是可以在lambda语句中完成? 我需要确保在尝试按部门排序之前,每个对象的部门数据不为空。

  • 我有一个HashMap,我需要使用一些函数对其进行筛选: 上述代码中的错误是变量的声明类型。应该是而不是。 所以现在的功能代码是: