java - 如果使用 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?
解决方案
流 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)
添加,
分隔符。
推荐阅读
- db2 - 对于云上的 db2,runstats 和 reorgchk/reorg 之类的事情会自动完成吗?
- php - 如何使用 line bot webhook 请求在线路组中使用 @mention/@tag 标记用户
- python - 如何在Django rest框架中检查数据是否存在
- javascript - 您是否总是必须将您的 socket.on 包装在 io.on 连接块中?
- iframe - 使用 puppeteer 单击 iframe 中的按钮
- linux - 从 udev 运行的 bash 脚本播放音乐
- python - 在创建标签时将 OneHotEncoding 反转为列表
- c++ - 自定义库无法打开 SDL2 & Box2D 等 Dependencies 的源文件
- flutter - Flutter/Dart - 透明背景直到未来到来?
- flutter - 如何收听我的 bloc 流中的变化