[英]Java if else in a lambda expression
我正在尝试使用lambda表达式对方法的输入参数在字符串的末尾是否具有特定字符'*'求值为true或false; 作为对象的构造函数的输入。 我肯定这还没有完成,但这是我在浏览网络并看到一些有关使用流的尝试之前要做的,但是我不确定它们在这种情况下将如何工作或是否会工作:
public void addPermission(String permission, String resource){
permissions.put(new Permission(permission,
()-> {if (permission.charAt(permissions.size() - 1) == '*') return true; }));
}
任何投入将不胜感激。
您需要为此使用流吗? 功课,打赌,什么?
如果你不这样做
用endsWith()
方法对String进行简单的旧检查就足够了。
public void addPermission(String permission, String resource){
permissions.put(new Permission(permission, permission.endsWith("*")));
}
如果您想玩Lambdas
您可以提供一种方法来告诉构造函数填写该标志所需执行的检查类型。
构造函数:
public Permission(String permission, Predicate<String> checker) {
this.permission = permission;
this.flag = checker.test(permission);
}
呼叫者:
new Permission(permission, (p) -> p.endsWith("*"));
您的lambda表达式缺少else情况(或最终返回),请参见以下示例:
public void addPermission(String permission, String resource){
permissions.put(new Permission(permission, ()-> {
if (permission.charAt(permissions.size() - 1) == '*')
return true;
return false;
}));
}
请注意,如果permissions
是Map,则不会编译,因为Map.put
的签名不符合要求。
另一个简化(除了别人已经提到的那些之外):
public void addPermission(String permission, String resource){
permissions.put(new Permission(permission, ()-> permission.charAt(permissions.size() - 1) == '*'));
}
给定lambda的类型应为无参数且结果为Boolean
的FunctionalInterface
,例如Supplier<Boolean>
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.