首页 > 解决方案 > 如果使用 java 8 方法,我该如何简化

问题描述

public Pair<String, String> getSalesChannelDisplayData(DiscountRule rule, List<SalesChannelDto> allSalesChannels) {
        String salesChannelDisplayNames = "";
        String salesChannelDefaultCountryCodes = "";
        Set<String> storeCodes = new HashSet<>();
        if(rule.getConditions() != null) {
            for (Condition condition : rule.getConditions()) {
                if (condition instanceof ValueCondition) {
                    if (((ValueCondition) condition).getField() == Field.SALES_CHANNEL) {
                        Set<String> salesChannelIds = new HashSet<>();
                        if(((ValueCondition) condition).getOperator().equals(Operator.IN)){
                            salesChannelIds = ((ValueCondition) condition).getValues();
                        }else if (((ValueCondition) condition).getOperator().equals(Operator.NOT_IN)) {
                            salesChannelIds = allSalesChannels.stream().map(SalesChannelDto::getId).collect(Collectors.toSet());
                            salesChannelIds.removeAll(((ValueCondition) condition).getValues());
                        }
                        for (String salesChannelId : salesChannelIds) {
                            SalesChannelDto salesChannel = Beans.find(allSalesChannels, s-> s.getId().equals(salesChannelId));
                            salesChannelDisplayNames += salesChannel.getDisplayName() + ", ";
                            storeCodes.add(salesChannel.getDefaultCountryCode());
                        }
                    }
                }
            }
    if (salesChannelDisplayNames.length()>1) {
        salesChannelDisplayNames = salesChannelDisplayNames.substring(0,salesChannelDisplayNames.length()-2);
        salesChannelDefaultCountryCodes = Joiner.on(", ").join(storeCodes);
    }
    return new Pair<>(salesChannelDisplayNames, salesChannelDefaultCountryCodes);
        }

我想使用 java 流 API 来简化上面的代码。是否可以用java 8方法替换if,else if?

标签: javajava-8java-stream

解决方案


流 API 不是简化代码的好选择。您的代码中有一些部分可以修改。

1-不需要检查rule.getConditions()无效性。

if(rule.getConditions() != null) {...}

2-不要重复自己:((ValueCondition) condition)相反,您可以为它定义一个变量并使用它。

ValueCondition vCondition = (ValueCondition) condition;

3- 而是连接salesChannelDisplayNames声明 aList<String> salesChannelNames = new ArrayList<>();并将channelName添加到其中。

salesChannelNames.add(salesChannel.getDisplayName());

最后用于在它们之间String.join(",", salesChannelNames)添加,分隔符。


推荐阅读