簡體   English   中英

Java 8嵌套null檢查列表中映射中的字符串

[英]Java 8 nested null check for a string in a map in a list

我需要做一系列的空檢查(嵌套的空檢查)以獲取如下所示的字符串數組

String[] test;
if(CollectionUtils.isNotEmpty(checkList)){
    if(MapUtils.isNotEmpty(checkList.get(0))){
        if(StringUtils.isNotBlank(checkList.get(0).get("filename"))){
            test = checkList.get(0).get("filename").split("_");
        }
    }
}

有沒有更好的方法(也許使用Java8 Optional)來執行此類嵌套檢查? 我嘗試將Optional與flatmap / map結合使用失敗。

您可以使用一長串的OptionalStream操作將輸入逐步轉換為輸出。 像這樣(未經測試):

String[] test = Optional.ofNullable(checkList)
    .map(Collection::stream)
    .orElseGet(Stream::empty)
    .findFirst()
    .map(m -> m.get("filename"))
    .filter(f -> !f.trim().isEmpty())
    .map(f -> f.split("_"))
    .orElse(null);

我強烈建議您停止使用null列表和地圖。 這是一個很大更好地使用的集合,而不是的集合,這樣你就不必有null檢查所有的地方。 此外,請勿在您的集合中使用空字符串或空白字符串。 將用戶輸入轉換為內存中對象后,立即將其過濾掉或將其替換為null 您不需要isBlank()都插入對trim()isBlank()等的調用。

如果這樣做,則可以簡化為:

String[] test = checkList.stream()
    .findFirst()
    .map(m -> m.get("filename"))
    .map(f -> f.split("_"))
    .orElse(null);

好多了,不是嗎?

不要嵌套if ,而是將它們解開並反轉:

String[] defaultValue = // let this be what ever you want

if(checkList == null || checkList.isEmpty()) {
    return defaultValue;
}

Map<String, String> map = checkList.get(0);
if(map == null || map.isEmpty()) {
    return defaultValue;
}

String string = map.get("filename");
if(string == null || string.trim().isEmpty()) {
    return defaultValue;
}

return string.split("_");

雖然這僅在將提取邏輯包裝在方法中時才有效:

public static String[] unwrap(List<Map<String, String>> checkList) {
    ...
}

如果checkList為null,它將在CollectionUtils.isNotEmpty(checkList)上引發空指針異常。 還要使用內置的空檢查器。 更好的是你應該編碼

        if (null != checkList && !checkList.isEmpty() 
                && null != checkList.get(0) && !checkList.get(0).isEmpty()
                && StringUtils.isNotBlank(checkList.get(0).get("filename"))) {

            test = checkList.get(0).get("filename").split("_");

        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM