Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从值列表中检查布尔值是否为真_Java_C#_C# 3.0 - Fatal编程技术网

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