针对上述情况如何使用Java 8 Optional?

Mah*_*esh 2 java optional java-8

假设我有一个pojo Medicine

class Medicine{
    private String xmedicine;
    private String ymedicine;
    private String zmedicine;

    //getter and setter here....
}
Run Code Online (Sandbox Code Playgroud)

如果Medicine不为null,则用于收集药物的API下方。

public List<Map<String, Object>> gettMedicine(Medicine medicine) {
        List<Map<String, Object>> detailsList = null;

        List<Integer> list = new ArrayList<>();

        if(null != medicine.getXmedicine()){
            list.add(medicine.getXmedicine());                              
        }
        if(null != medicine.getYmedicine()){
            list.add(medicine.getYmedicine());                              
        }
        if(null != medicine.getZmedicine()){
            list.add(medicine.getZmedicine());                              
        }
        if(!CollectionUtils.isEmpty(list)) {
            detailsList = //calling other API to get details from list;
        }
        return detailsList;
}
Run Code Online (Sandbox Code Playgroud)

最好在Optional这里使用Java 8 来消除,NullPointerException因为我有多个空检查使我的代码样本化。

如果是,那么您能建议我Optional在这里使用吗?

Adr*_*ian 6

您不应该Optional在类中使用字段,也不应该像在ifs中那样用null检查替换它。在这种情况下,您可以执行以下操作:

Stream.of(medicine.getXmedicine(), medicine.getYmedicine(), medicine.getZmedicine())
       .filter(Objects::nonNull)
       .collect(Collectors.toList())
Run Code Online (Sandbox Code Playgroud)