Java 如何从值列表中检查布尔值是否为真
我有一个布尔值列表,检查其中一个布尔值是否为真,其他所有布尔值是否为假的最有效方法是什么Java 如何从值列表中检查布尔值是否为真,java,c#,c#-3.0,Java,C#,C# 3.0,我有一个布尔值列表,检查其中一个布尔值是否为真,其他所有布尔值是否为假的最有效方法是什么 例如,我有一个100个布尔值的数组,如何检查1个布尔值是否为真,而所有其他布尔值是否为假 遍历列表并检查每个值。如果找到第二个真值,请停止: int countTrue=0; for(boolean value: [Your List]){ if(value) countTrue++; if(countTrue>1) break; }
例如,我有一个100个布尔值的数组,如何检查1个布尔值是否为真,而所有其他布尔值是否为假 遍历列表并检查每个值。如果找到第二个真值,请停止:
int countTrue=0;
for(boolean value: [Your List]){
if(value)
countTrue++;
if(countTrue>1)
break;
}
Check countTrue==1 OR not
boolean found = false;
for (boolean b : list) {
if (b) {
if (found) return false;
found = true;
}
}
return found;
或者,您可以使用List.indexOf
和List.lastIndexOf
:
int indexOfFirstTrue = list.indexOf(true);
return indexOfFirstTrue != -1 && list.lastIndexOf(true) != indexOfFirstTrue;
遍历列表并检查每个值。如果找到第二个真值,请停止:
boolean found = false;
for (boolean b : list) {
if (b) {
if (found) return false;
found = true;
}
}
return found;
或者,您可以使用List.indexOf
和List.lastIndexOf
:
int indexOfFirstTrue = list.indexOf(true);
return indexOfFirstTrue != -1 && list.lastIndexOf(true) != indexOfFirstTrue;
最有效的方法是使用
位集
而不是数组:
BitSet set = new BitSet(100); // ~ boolean[] array = new boolean[100];
set.set(42); // ~ array[42] = true;
[...]
int countTrueBits = set.cardinality();
位集
使用移位操作,因此速度非常快
阅读更多信息:最有效的方法是使用
位集而不是数组:
BitSet set = new BitSet(100); // ~ boolean[] array = new boolean[100];
set.set(42); // ~ array[42] = true;
[...]
int countTrueBits = set.cardinality();
位集
使用移位操作,因此速度非常快
阅读更多信息:如果您正在使用Java 8,您可以使用以下内容:
long size = booleanList.stream().filter(b -> Boolean.TRUE.equals(b)).count();
if(size == 1) {
// do something
}
如果您使用的是Java 8,则可以使用:
long size = booleanList.stream().filter(b -> Boolean.TRUE.equals(b)).count();
if(size == 1) {
// do something
}
使用Java8流
List<Boolean> bools = list.stream().filter(val -> false)
.collect(Collectors.asList());
if (bools.size()==99) { ...}
它将获得遇到的第一个true
值,并使用Java8流将其返回到可选的中
List<Boolean> bools = list.stream().filter(val -> false)
.collect(Collectors.asList());
if (bools.size()==99) { ...}
它将获得遇到的第一个true
值,并在作者想要知道的可选中返回它
如何检查1个布尔值是否为真,而所有其他布尔值是否为假
int countTrue=0;
for(boolean value: [Your List]){
if(value)
countTrue++;
if(countTrue>1)
break;
}
Check countTrue==1 OR not
在C#中,我会做类似的事情
假设
List<bool> booleanList;
作者想知道是否只有1个值是布尔值
如何检查1个布尔值是否为真,而所有其他布尔值是否为假
int countTrue=0;
for(boolean value: [Your List]){
if(value)
countTrue++;
if(countTrue>1)
break;
}
Check countTrue==1 OR not
在C#中,我会做类似的事情
假设
List<bool> booleanList;
在C#中,使用LinQ可以在一行代码中完成
var check=itemList.Any(x=>x.isActive==true)代码>
如果列表中有任何一个模型处于活动状态,它将返回true。在C#中,使用LinQ可以在一行代码中完成
var check=itemList.Any(x=>x.isActive==true)代码>
如果列表中有任何一个模型处于活动状态,它将返回true。我使用了System.Linq中的IEnumerable.Count(Func),其中T为bool
bool[] values = {true, false, false, false};
int trueCount = values.Count(b=> b);
这将为您提供列表中“true”值的数量我使用System.Linq中的IEnumerable.Count(Func),其中T为bool
bool[] values = {true, false, false, false};
int trueCount = values.Count(b=> b);
这将为您提供列表中“真”值的数量,精确到1?遍历列表并检查每个值。当你找到第二个真值时停止。请发布你的代码你在使用Java 8吗?我看到C#标记,在其中,你可以做列表。如果你想计数,你想检查索引,计数,或者如果任何布尔值为真,只返回真值?精确为1?遍历列表并检查每个值。当你找到第二个真值时停止。请发布你的代码你在使用Java 8吗?我看到C#标记,在其中,你可以做列表。计数如果你想检查索引,计数,或者,如果任何布尔值为真,则仅返回真值?对于多个真布尔值,此操作也会返回真值对于多个真布尔值,此操作也会返回真值,并且遍历一大组值将花费大量时间,我想看看是否有一种简单的方法。如果您想只检查一个真值,除了迭代之外,你别无选择。@SyameshK-foreach
迭代形式-我认为你做得再好不过了。很好地使用了indexOf()
,在列表中查找值的效率可能比列表
自己的实现要高。遍历一大组值会花费很多时间,我想看看是否有一种简单的方法。如果要检查一个值是否为true,你只能迭代它们。@SyameshK-foreach
迭代形式-我认为你不能做得更好。很好地使用了indexOf()
,你在列表中查找值的效率可能比list
自己的实现要高。有没有c等价物?@SyameshK是的,BitArray:如果您已经有一个位集,那么它的性能可能是最好的;但是,如果您有一个列表(或数组),转换为位集
要比迭代列表花费更多的精力(因为它需要迭代列表,然后再做其他事情)。@AndyTurner这就是为什么我说“使用位集而不是数组”。将数组转换为位集肯定不是一个好主意。是否有任何c#等价物?@SyameshK是的,位数组:如果您已经有一个位集,它可能是最有效的;但是,如果您有一个列表(或数组),转换为位集
要比迭代列表花费更多的精力(因为它需要迭代列表,然后再做其他事情)。@AndyTurner这就是为什么我说“使用位集而不是数组”。将数组转换为位集肯定不是一个好主意。+1,也就是OP说他有一个包含100项的列表,你真的可以只做int falseCount=100-trueCount
非常正确。我只是给了他两个选项,他可以用任何一种方式检查正确与否:)+1,而且OP说他有100个项目的列表,你真的可以做int falsecont=100-trueCount
非常正确。我只是给了他两个选项,他可以通过任何一种方式检查真值或假值:)在找到第一个true
value之后,您可能希望停止。由于我们的条件失败,我们不需要修改整个列表。一旦我发现第二个是真的,我就打破了循环。哦,对了,对不起。但是你不需要真正持有计数器,只要在值为真时中断即可。我想我们需要计数器,或者我们可以使用布尔值。在找到第一个值为真后,你可能需要停止。由于我们的条件失败,我们不需要修改整个列表。一旦我发现第二个是真的,我就打破了循环。哦,对了,对不起。但你们不需要拿着计数器,只要在值为真的时候打破它,我想我们需要计数器,或者我们可以使用b