lambda表达式中的Java if-else
我试图使用lambda表达式计算方法的输入参数在字符串末尾是否有特定字符“*”;作为对象构造函数的输入。我确信这是远远不够的,但这是我在环顾网络并看到一些关于使用流的内容之前尝试做的,但我不确定它们如何或是否适用于这种情况:lambda表达式中的Java if-else,java,if-statement,lambda,Java,If Statement,Lambda,我试图使用lambda表达式计算方法的输入参数在字符串末尾是否有特定字符“*”;作为对象构造函数的输入。我确信这是远远不够的,但这是我在环顾网络并看到一些关于使用流的内容之前尝试做的,但我不确定它们如何或是否适用于这种情况: public void addPermission(String permission, String resource){ permissions.put(new Permission(permission, ()-> {if (permission.ch
public void addPermission(String permission, String resource){
permissions.put(new Permission(permission,
()-> {if (permission.charAt(permissions.size() - 1) == '*') return true; }));
}
如有任何意见,将不胜感激 您需要为此使用流吗?家庭作业,打赌,随便什么
如果您没有
使用endsWith()
方法对字符串进行简单的旧检查就足够了
public void addPermission(String permission, String resource){
permissions.put(new Permission(permission, permission.endsWith("*")));
}
如果你想玩lambdas
您可以提供一种方法来告诉构造函数需要执行什么类型的检查才能填写该标志
建造商:
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
的签名不兼容
另一种简化(其他人已经提到的简化除外):
给定lambda的类型应该是一个
功能接口
,没有参数和结果布尔值
,例如供应商
没有必要,我只是想找到一种方法来确定参数中的布尔值,而不是在方法体中使用if-else。你的方式很棒!
new Permission(permission, (p) -> p.endsWith("*"));
public void addPermission(String permission, String resource){
permissions.put(new Permission(permission, ()-> {
if (permission.charAt(permissions.size() - 1) == '*')
return true;
return false;
}));
}
public void addPermission(String permission, String resource){
permissions.put(new Permission(permission, ()-> permission.charAt(permissions.size() - 1) == '*'));
}