我認爲最乾淨的方法是,你擁有它。不過,你可以使用一個輔助方法,以避免重複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
轉換爲其值。最後,您將所有這些投遞地址類型值收集到一個列表中。
在上面的代碼中'if'condition'返回true或false.if我已經添加到列表中。 – anonymous