我正在尝试使用lambda表达式来计算方法的输入参数在字符串末尾是否具有某个字符'*'时为true或false;作为对象的构造函数的输入。我确定这是关闭的,但这是我在环顾网络之前尝试做的事情,看到一些人指的是使用溪流,但我不确定他们是否会在这种情况下工作:
public void addPermission(String permission, String resource){
permissions.put(new Permission(permission,
()-> {if (permission.charAt(permissions.size() - 1) == '*') return true; }));
}
任何输入都将不胜感激。
答案 0 :(得分:0)
你需要为此使用流吗?家庭作业,打赌,不管怎样?
如果你没有
使用endsWith()
方法对字符串进行简单的旧检查就足够了。
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("*"));
答案 1 :(得分:0)
您的lambda表达式缺少else case(或最终返回),请参阅此示例:
public void addPermission(String permission, String resource){
permissions.put(new Permission(permission, ()-> {
if (permission.charAt(permissions.size() - 1) == '*')
return true;
return false;
}));
}
请注意,如果permissions
是地图,则无法编译,因为Map.put
的签名不符合。
另一种简化(除了其他人已经提到的那些):
public void addPermission(String permission, String resource){
permissions.put(new Permission(permission, ()-> permission.charAt(permissions.size() - 1) == '*'));
}
给定lambda的类型应为FunctionalInterface
,不带参数,结果为Boolean
,例如Supplier<Boolean>
。