在Java中缩小或/和表达式?
我一直很好奇,是否有可能简化Java或Java表达式。例如:在Java中缩小或/和表达式?,java,Java,我一直很好奇,是否有可能简化Java或Java表达式。例如: int mapVal = occurrenceMap.get(node.nextNode.nodeVal); if (mapVal != null || mapVal != 5 ) 对 if (occurrenceMap.get(node.nextNode.nodeVal) != ( null || 1) ) 在我看来,第二种语言更具可读性,但我想知道这种语言是否支持这样的东西 if(occurrenceMap.get(node
int mapVal = occurrenceMap.get(node.nextNode.nodeVal);
if (mapVal != null || mapVal != 5 )
对
if (occurrenceMap.get(node.nextNode.nodeVal) != ( null || 1) )
在我看来,第二种语言更具可读性,但我想知道这种语言是否支持这样的东西
if(occurrenceMap.get(node.nextNode.nodeVal)!=(null | | 1))
第二种更具可读性,但不知道该语言是否支持
像这样的
不,Java不支持这一点
对于一个好的解决方案,我想使用:
Integer i = occurrenceMap.get(node.nextNode.nodeVal);
if (i != null || i != 1)
注意:注释中提到的基本int或type在Java中一般不能为null
if(occurrenceMap.get(node.nextNode.nodeVal)!=(null | | 1))
第二种更具可读性,但不知道该语言是否支持
像这样的
不,Java不支持这一点
对于一个好的解决方案,我想使用:
Integer i = occurrenceMap.get(node.nextNode.nodeVal);
if (i != null || i != 1)
注意:如注释中所述,Java中的原语int或type一般不能为null。如果你想简化布尔表达式,你应该学习一些公理和定律:
- !!a=a
- (!a | | a)=真
- (!a&&a)=错误
- (真和a)=a
- (false&&a)=false
- (真| | a)=真
- (假| a)=a
- (!a | |!b)=!(a和b)
- (!a&&!b)=!(a | | b)
- (a!=b)=!(a==b)
- (a)
- (a>=b)=(b
(a | | b)
已经有了意义,所以a==(c | | d)
已经有了固定的意义,更改它可能会破坏很多代码。可能有支持这种符号的语言,但它们将使用不同的运算符而不是二进制布尔运算符,因为否则就不可能区分程序员真正想要什么
您完全可以向Java添加这样一个特性,但您必须创建一个新的操作符才能做到这一点。但到目前为止:Java没有这个功能,大多数语言也没有
有些语言允许您执行“a
从技术上讲,您可以为此创建助手函数,例如
“if isOneOf(mapVal,a,b)”但这可能不会被广泛使用(最重要的是,这需要一些运行时技巧来实现) 如果你想简化布尔表达式,你应该学习一些公理和定律:
- !!a=a
- (!a | | a)=真
- (!a&&a)=错误
- (真和a)=a
- (false&&a)=false
- (真| | a)=真
- (假| a)=a
- (!a | |!b)=!(a和b)
- (!a&&!b)=!(a | | b)
- (a!=b)=!(a==b)
- (a)
- (a>=b)=(b
(a | | b)
已经有了意义,所以a==(c | | d)
已经有了固定的意义,更改它可能会破坏很多代码。可能有支持这种符号的语言,但它们将使用不同的运算符而不是二进制布尔运算符,因为否则就不可能区分程序员真正想要什么
您完全可以向Java添加这样一个特性,但您必须创建一个新的操作符才能做到这一点。但到目前为止:Java没有这个功能,大多数语言也没有
有些语言允许您执行“a
从技术上讲,您可以为此创建助手函数,例如
“if isOneOf(mapVal,a,b)”但这可能不会被广泛使用(最重要的是,这需要一些运行时技巧来实现) 首先,
int
不能为null
。如果有int
,则不需要检查null
。这根本不可能发生
以下是一种检查值是否等于任何值列表的方法:
public static <T> boolean anyEquals(T value, T... values) {
for (T val: values) {
if (val == value) { // or val.equals(value)
return true;
}
}
return false;
// implementation with streams
// return Arrays.stream(values).anyMatch(x -> x == value); // or x.equals(value)
}
首先,
int
不能为null
。如果有int
,则不需要检查null
。这根本不可能发生
以下是一种检查值是否等于任何值列表的方法:
public static <T> boolean anyEquals(T value, T... values) {
for (T val: values) {
if (val == value) { // or val.equals(value)
return true;
}
}
return false;
// implementation with streams
// return Arrays.stream(values).anyMatch(x -> x == value); // or x.equals(value)
}
使用
使用
我可以通过不进行两次
get
调用来缩短它。分配一次,计算两次。第二个表达式有两种含义。将根据返回的值检查get
值,还是同时检查这两个值?因为布尔表达式X | | Y
将返回布尔值。请不要更改问题的上下文!Java不支持运算符重载。在Kotlin中使用in
运算符可以实现您真正想要的功能,并且对于任何类型都可以重载。我可以通过不进行两次get
调用来缩短它。赋值一次,求值两次。第二个表达式有两种含义。将根据返回的值检查get
值,还是同时检查这两个值?因为布尔表达式X | | Y
将返回布尔值。请不要更改问题的上下文!Java不支持运算符重载。在Kotlin中使用in
操作符可以实现您真正想要的功能,并且可以为任何type@TimBiegeleisen更正OP把他的问题从第一个版本改过来了我认为这是一个Integer@TimBiegeleisen更正OP把他的问题从第一个版本改过来了,我想这是一个整数,上面写着“类似这样的东西”。他知道他不能用Java那样写。他想知道是否有一个语法来“因子”条件。这是有道理的。这太令人困惑了。OP说“像这样的东西”。他知道他不能用Java那样写。他想知道是否有一个语法来“因子”条件。这是有道理的。这太让人困惑了。你的视野真的很不一样,很真实