2017-03-07 118 views
-3

如果result = false,我試圖返回False。我無法改變返回類型。如果result = false,linkList需要返回false。由於以非布爾方法返回布爾值

private static class FilteringFlatApplyFunction<T> implements FlatApplyFunction<T,T> {   
    private final Predicate pred; 
    LinkedList<T> linkList = new LinkedList<T>(); 

    public FilteringFlatApplyFunction(Predicate<T> p) {        
     this.pred = p; 
     this.linkList = linkList; 
    } 

    @Override 
    public List<T> apply(T x){    
     boolean result = pred.check(x);    
     if (result = true) { 
      linkList.add(x); 
      return linkList; 
     }     
     if (result = false) { 
      linkList = false;    
     }    
     return linkList;        
    } 
} 
+3

Re'if(result = true)'和'if(result = false)':'='是**賦值**,不是比較;比較是'==':http://stackoverflow.com/questions/39385382/why-doesnt-my-equality-comparison-using-a-single-equals-work-correctly-in-j(另外:不要使用'=='或'!='布爾值[部分出於這個原因],你已經有了一個布爾值,只要'if(result)'和'if(!result)'。 –

回答

0

您不能返回booleanList,你所能做的就是回到null

當你正在檢查的情況下,你可以做的是,創建封裝你apply方法的另一種方法,並返回什麼,如果你是listnull那麼它是假的。如下所示:

if(linkList == null) 
    return false; 
else 
    return true; 

此外,使用==進行比較。

如下:

@Override 
public List<T> apply(T x){    
    boolean result = pred.check(x);    
    if(result == true) { 
     linkList.add(x); 
     return linkList; 
    } 
    if(result == false){ 
     return null;    
    } 
    return linkList; 
} 

或者你需要布爾值的情況下不使用==,像下面

@Override 
public List<T> apply(T x){    
    boolean result = pred.check(x);    
    if(result){ 
     linkList.add(x); 
     return linkList; 
    } 
    if(result){ 
     linkList = false;    
    } 
    return linkList; 
} 
+1

如何分配布爾值一個List變量? –

+0

我無法設置linkList = false,它會返回一個錯誤,說布爾值不能轉換爲LinkedList

+0

@WasiAhmad:更新了答案。最初誤解爲 – Parth

6

很簡單,你不能。方法簽名非常清楚地表明它將返回List<T>,並且List<T>是您應該返回的內容。

您可以改爲返回null

0

如果該方法明確返回List,則不能返回false。你可以做的是返回`空「:在調用方法

@Override 
public List<T> apply(T x){    
    boolean result = pred.check(x);    
    if (result == true) { 
     linkList.add(x); 
     return linkList; 
    } 
    if (result == false) { 
     linkList = null;    
    } 
    return linkList; 
} 

然後執行以下操作:

List<T> list = apply(x); 
boolean result; 
if (list == null){ 
    result = false; 
} 
+0

您的答案和@JoeC答案有什麼區別? –

+0

這一個將總是返回非空列表。 –

+0

你是對的安迪,這是@Joe Van Horn的代碼我錯過了一個錯誤:) - 更新了我的答案 –

0

對不起芽。你不能返回不同的類型。返回NULL或者可能返回一個對象是你最好的機會。

0

如果結果爲false,則返回null,所以我認爲如果結果爲假,則不需要進行測試!

private static class FilteringFlatApplyFunction<T> implements FlatApplyFunction<T,T> {   
    private final Predicate pred; 
    LinkedList<T> linkList = new LinkedList<T>(); 

    public FilteringFlatApplyFunction(Predicate<T> p) {        
     this.pred = p; 
     this.linkList = linkList; 
    } 

    @Override 
    public List<T> apply(T x){    
     boolean result = pred.check(x);    
     if (result) { 
      linkList.add(x); 
     }       
     return linkList;        
    } 
}