2015-10-21 83 views
0

我想用一個lambda表達式來計算true或false關於一個方法的輸入參數是否在字符串末尾有一個特定的字符'*'作爲對象的構造函數的輸入。即時通訊確定這是方式,但這是我想要做的事情之前,我環顧網絡,看到一些提到使用流,但我不知道如何或如果他們會爲這種情況工作:Java如果其他在lambda表達式

public void addPermission(String permission, String resource){ 
    permissions.put(new Permission(permission, 
()-> {if (permission.charAt(permissions.size() - 1) == '*') return true; })); 
} 

任何輸入將不勝感激。

回答

0

你的lambda表達式缺少其他情況下(或最終的回報),看到這個例子:

public void addPermission(String permission, String resource){ 
    permissions.put(new Permission(permission,()-> { 
    if (permission.charAt(permissions.size() - 1) == '*') 
     return true; 
    return false; 
    })); 
} 

請注意,thi如果permissions是Map,s將不會編譯,因爲Map.put的簽名不符合。

(已經被別人所提到的那些以外)另一個簡化:

public void addPermission(String permission, String resource){ 
    permissions.put(new Permission(permission,()-> permission.charAt(permissions.size() - 1) == '*')); 
} 

該類型的給定的λ的應該是一個FunctionalInterface不帶參數和結果Boolean,例如Supplier<Boolean>

0

需要爲此使用流嗎?家庭作業,打賭,不管?

如果不這樣做

上與endsWith()方法就足夠了字符串是一個普通的舊的檢查。

public void addPermission(String permission, String resource){ 
    permissions.put(new Permission(permission, permission.endsWith("*"))); 
} 

如果你想玩弄lambda表達式

可以提供一種方式來告訴它需要以填補該標誌做什麼類型檢查的構造。

構造:

public Permission(String permission, Predicate<String> checker) { 
    this.permission = permission; 
    this.flag = checker.test(permission); 
} 

來電:

new Permission(permission, (p) -> p.endsWith("*")); 
+0

沒有必要,我只是想弄清楚一些方法來決定在參數中的布爾值,而不是在方法體中使用if。你的方式很棒! – StillLearningToCode