簡體   English   中英

Java 8中的列表為空時如何返回null?

[英]How to return null when list is empty in Java 8?

如果作為參數傳遞的列表為而不使用if語句,我該如何更改此方法以使其返回null

 default String getFiltersExpression(List<WorklistViewDto.Filter> filters) {
    return Optional.ofNullable(filters)
        .map(Collection::stream)
        .orElseGet(Stream::empty)
        .map(WorkListViewMapper::formatValue)
        .map(f -> f.getCriteria() + f.getOperator() + f.getValue())
        .collect(Collectors.joining(" AND ", "(", ")"));
}

您可以使用Collectors.collectingAndThen 來完成

.collect( 
    Collectors.collectingAndThen(
        Collectors.joining(), 
        str->{
            if(str.isEmpty()) return null; 
            return str;
        }
     )
 );

鑒於 OP 的加入聲​​明, Collectors.joining(" AND ", "(", ")")我們可以修改上面的內容。

Collectors.collectingAndThen(
    Collectors.joining(" AND "), 
    str->{
            if(str.isEmpty()) return null; 
            return "(" + str + ")";
    })

我建議不要返回 null 而是返回一個"()"字符串作為過濾器表達式,你可以在那里為一個空列表附加一個過濾器:

String getFiltersExpression(List<Filter> filters) {
    return Optional.ofNullable(filters)
            .filter(l -> !l.isEmpty())
            .map(Collection::stream)
            .orElseGet(Stream::empty)
            .map(WorkListViewMapper::formatValue)
            .map(f -> f.getCriteria() + f.getOperator())
            .collect(Collectors.joining(" AND ", "(", ")"));
}

使用 Java-9 語法:

String getFiltersExpressions(List<Filter> filters) {
    return Stream.ofNullable(filters)
            .flatMap(Collection::stream)
            .map(WorkListViewMapper::formatValue)
            .map(f -> f.getCriteria() + f.getOperator() + f.getValue())
            .collect(Collectors.joining(" AND ", "(", ")"));
}

另一種方法是僅當列表非空且非空時才開始流式傳輸:

default String getFiltersExpression(List<WorklistViewDto.Filter> filters) {
    return Optional.ofNullable(filters)
            .filter(fs -> !fs.isEmpty())
            .map(fs -> fs.stream()
                    .map(WorkListViewMapper::formatValue)
                    .map(f -> f.getCriteria() + f.getOperator() + f.getValue())
                    .collect(Collectors.joining(" AND ", "(", ")")))
            .orElse(null);
}

然后你得到 null 而不是()

List 時返回 null<object> 為空錯誤:[return.type.incompatible]<div id="text_translate"><p> 當 List 為空時,我試圖返回 null:</p><pre> public List&lt;Object&gt; extractOutput(List&lt;Object&gt; accumulator) { if (accumulator.isEmpty()){ return null; } return accumulator; }</pre><p> 但我收到錯誤:[return.type.incompatible]。 如果我能解決這個問題,我將不勝感激。</p></div></object>

[英]return null when List<Object> is empty error: [return.type.incompatible]

暫無
暫無

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

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