如何在Java8中使用if有效地创建列表?

索拉帕德曼

我已经开始学习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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在 F# 中以相反的顺序有效地创建列表

如何在python类列表中有效地创建编号列表

如何在iOS中有效地创建列表

如何在Cassandra中使用Datastax Java驱动程序有效地使用准备好的语句?

如何使用python中的列表有效地排序列表列表

如何有效地在 Unity 中使用继承?

如何有效地弯曲列表中的项目?

如何有效地从列表中删除

如何有效地搜索列表中的项目?

如何有效地在python中创建索引列表?

如何在Python 2.7中使用多个键有效地解析JSON数据?

如何在Java中有效地合并两个列表?

python - 如何使用Python中的值列表有效地更新dict键值列表

如何在R中使用嵌套函数有效地执行复杂的行操作?

如何在python和php中使用ZMQ有效地发送单个消息

如何在python中更有效地搜索大型列表?

有效地使用JSON流(在Java中)

如何使用R中的列表条目有效地设置矩阵的值?

如何使用CSS有效地使列表中的部分居中[Img Inside]

如何在Java中有效地使用常量值初始化数组

如何在Javascript中更有效地使用.search()方法?

如何在Java中使用嵌套的for循环有效地处理powersablesables?

如何有效地创建一个带有define()列表的数组?

JAVA - 如何有效地将列表中的属性映射到另一个列表?

如何在熊猫数据框中使用一键编码有效地规范化列?

如何在Cygwin中使用Python有效地将POSIX路径转换为Windows路径?

如何有效地获取python列表中列表中项目的计数

如何在C#中将列表中对象的属性有效地导出到CSV?

如何在R中有效地附加列表的所有元素