java 8 流 if/else 重写

java 8 stream if/else rewrite

你能告诉我如何在这个方法中实现漂亮的逻辑吗?

protected Map<QueueType, QueueContext> getQueueContexts() {
    List<QueueContext> queueContexts = QueueContext.parseConfigs(Config.KAFKA_QUEUES.get());
    return queueContexts.stream()
                    .collect(Collectors.toMap(QueueContext::getQueueType, Function.identity()));
    }

需要检查List queueContexts中是否有QueueType.unknown,如果有,则写入日志,如果没有,则添加到Map。

我就是这么检查的,结果发现我收集的Map是正确的,但是所有的日志都是写的,我只需要写那些未知的

return queueContexts.stream().filter(type -> type.getQueueType() != QueueType.unknown)
                    .peek(ls -> LOGGER.info(ls))
                    .collect(Collectors.toMap(QueueContext::getQueueType, Function.identity()));

怎么样

return queueContexts.stream()
        .filter(type -> {
            if (type.getQueueType() != QueueType.unknown)
                return true;
            LOGGER.info(type);
            return false;
        })
        .collect(Collectors.toMap(QueueContext::getQueueType, Function.identity()));

或者你可以创建一个方法来替换过滤器的核心:

private boolean isNotUnknown(QueueContext type){
    if (type.getQueueType() != QueueType.unknown)
        return true;
    LOGGER.info(type);
    return false;
}

然后:

return queueContexts.stream()
        .filter(this::isNotUnknown)
        .collect(Collectors.toMap(QueueContext::getQueueType, Function.identity()));