首页 > 解决方案 > 在 java 中处理流时记录警告消息

问题描述

rdsDesksByName.get(e.getKey())如果地图没有任何键值,我想记录错误消息。我如何在流中处理这个?

目前我返回,但是如果键没有任何值,createDeskWithScope(rdsDesksByName.get(e.getKey()),ds.outOfScope())如何增强此功能以记录错误消息,否则它应该照常处理rdsDesksByName

List<Desk> desks = deskScopesByName.entrySet()
    .stream()
    .flatMap(e -> {
        return deskScopesByName.get(e.getKey())
            .stream()
            .map(ds -> {
                return createDeskWithScope(rdsDesksByName.get(e.getKey()), ds.outOfScope());
            });                     
    })
   .collect(Collectors.toList());

标签: javajava-stream

解决方案


在 flatmapping 操作中,通过 key 找到一个对象并使用if-else条件:

  • 如果对象是null(此类键没有值),则记录一条消息并返回Stream.empty()
  • 否则,继续使用createDeskWithScope方法处理。

下面是代码的样子(未经测试,但应该给你一个想法):

List<Desk> desks = deskScopesByName.entrySet()
    .stream()
    .flatMap(entry -> {
        String key = entry.getKey();
        Desk rdsDesk = rdsDesksByName.get(key);
        if (rdsDesk == null) {
            log.warn("There is no Desk present for {}", key);
            return Stream.empty();
        } else {
            return entry.getValue()
                .stream()
                .map(ds -> createDeskWithScope(rdsDesk, ds.outOfScope()));
        }
    })
    .collect(Collectors.toList());

我建议将平面映射操作包装在一个方法中。


推荐阅读