开发者社区> 问答> 正文

Java Streams如何在映射新列表时检查空值并发送消息

因此,我基本上是在尝试找出是否有办法避免两次重复相同的代码,并在出现语法错误的地方获取密钥。

List<String> listOfKeys = new ArrayList<>(
    Arrays.asList("key1", "key2", "key3", "key4", "key5"));
String path = "something.something.";

listOfKeys.stream()
    .map(key -> path + key)
    .map(getConfig()::getString)
    .forEach(value -> { 
        if (value == null || value.isEmpty()) 
            getLogger().info(key + " is empty"); 
    }); 

List<String> listOfValue = listOfKeys.stream()
    .map(key -> path + key)
    .map(getConfig()::getString)
    .collect(Collectors.toList());

我知道log方法中的键是语法错误,但是我想知道如何才能在该点访问该键并使用具有空值的键发送消息?listOfValues在第二个流中创建时是否还可以完成所有操作?

问题来源:Stack Overflow

展开
收起
montos 2020-03-25 21:09:09 448 0
1 条回答
写回答
取消 提交回答
  • 您可以使用peek。它评估代码块并继续流式处理:

    List<String> listOfValue = listOfKeys.stream()
        .map(key -> path + key)
        .map(getConfig()::getString)
        .peek(value -> { 
            if (value == null || value.isEmpty()) 
                getLogger().info(key + " is empty"); 
        })
        .collect(Collectors.toList());
    

    如果要在记录中使用密钥,则可以使用Map.Entry:

    List<String> listOfValue = listOfKeys.stream()
        .map(key -> new AbstractMap.SimpleEntry(key, getConfig().getString(path + key))
        .peek(entry -> { 
            if (entry.getValue() == null || entry.getValue().isEmpty()) 
                getLogger().info(entry.getKey() + " is empty"); 
        })
        .map(AbstractMap.SimpleEntry::getValue)
        .collect(Collectors.toList());
    

    回答来源:Stack Overflow

    2020-03-25 21:09:51
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载