我已经开始学习Java8。我一直在遵循使用if
条件创建列表(针对以下代码)的传统方法。我的代码正在运行,但是有什么有效的方法可以使用java8来实现?请告诉我
private List<String> getDeliveryAddressTypeList() {
List<String> deliveryAddressTypeList = new ArrayList<>();
deliveryAddressTypeList.add(DeliveryAddressType.MY_DEFAULT_ADDRESS.getValue());
if (SecurityUtils.getSubject().isPermitted(PermissionConstant.PHARMISA_DELIVERY_PFDEPORTS)) {
deliveryAddressTypeList.add(DeliveryAddressType.DEPOT_ADDRESS.getValue());
}
if (SecurityUtils.getSubject().isPermitted(PermissionConstant.PHARMISA_DELIVERY_ALL_CONTACTS)) {
deliveryAddressTypeList.add(DeliveryAddressType.CONTACT_ADDRESS.getValue());
}
if (SecurityUtils.getSubject().isPermitted(PermissionConstant.PHARMISA_DELIVERY_FREE_FROM_ADDRESS)) {
deliveryAddressTypeList.add(DeliveryAddressType.AN_ALTERNATIVE_ADDRESS.getValue());
}
return deliveryAddressTypeList;
}
我相信最干净的方法就是随您使用。尽管如此,您可以使用辅助方法来避免重复的if
语句:
static void addIfPermitted(List<String> list, DeliveryAddressType addressType,
PermissionConstant permission) {
if (SecurityUtils.getSubject().isPermitted(permission) {
list.add(addressType.getValue());
}
}
现在,您可以通过以下方式使用此帮助程序方法:
List<String> deliveryAddressTypeList = new ArrayList<>(Arrays.asList(
DeliveryAddressType.MY_DEFAULT_ADDRESS.getValue()));
addIfPermitted(deliveryAddressTypeList,
DeliveryAddressType.DEPOT_ADDRESS,
PermissionConstant.PHARMISA_DELIVERY_PFDEPORTS);
addIfPermitted(deliveryAddressTypeList,
DeliveryAddressType.CONTACT_ADDRESS,
PermissionConstant.PHARMISA_DELIVERY_ALL_CONTACTS);
addIfPermitted(deliveryAddressTypeList,
DeliveryAddressType.AN_ALTERNATIVE_ADDRESS,
PermissionConstant.PHARMISA_DELIVERY_FREE_FROM_ADDRESS);
如果您想使用Java 8的东西,您可以创建一个Map<DeliveryAddressType, PermissionConstant>
:
List<String> deliveryAddressTypeList = new ArrayList<>(Arrays.asList(
DeliveryAddressType.MY_DEFAULT_ADDRESS.getValue()));
Map<DeliveryAddressType, PermissionConstant> map = new HashMap<>();
map.put(DeliveryAddressType.DEPOT_ADDRESS,
PermissionConstant.PHARMISA_DELIVERY_PFDEPORTS);
map.put(DeliveryAddressType.CONTACT_ADDRESS,
PermissionConstant.PHARMISA_DELIVERY_ALL_CONTACTS);
map.put(DeliveryAddressType.AN_ALTERNATIVE_ADDRESS,
PermissionConstant.PHARMISA_DELIVERY_FREE_FROM_ADDRESS);
然后:
map.forEach((addressType, permission) ->
addIfPermitted(deliveryAddressList, adressType, permission));
另一种方法,使用流和相同的地图,但是通过地图键创建最终列表:
List<String> deliveryAddressTypeList = map.entrySet().stream()
.filter(e -> SecurityUtils.getSubject().isPermitted(e.getValue()))
.map(Map.Entry::getKey)
.map(DeliveryAddressType::getValue)
.collect(Collectors.toList());
deliveryAddressTypeList.add(DeliveryAddressType.MY_DEFAULT_ADDRESS.getValue());
在这里,您可以过滤地图条目,并仅保留其值(PermissionConsdtant
)被证券允许的条目。然后,将每个过滤后的条目转换为其键(DeliveryAddressType
),然后将DeliveryAddressType
其转换为其值。最后,您将所有这些传递地址类型值收集到一个列表中。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句