我想知道知道集合的所有值是否与特定值匹配的最佳方法。
List<Integer> listOfStrings = new ArrayList<Integer>();
我想知道的是“listOfStrings”中的所有条目是否与特定值匹配;例如,没有整数不是'1'。
我需要最快的解决方案。我有一个解决方案,但它非常简陋。
答案 0 :(得分:4)
循环通过它:
public boolean checkAll(ArrayList<String> list) {
for(int i = 0; i < listOfStrings.size(); i++) {
String candidate = listOfStrings.get(i);
if(candidate == null || !candidate.equals("1")) {
return false;
}
}
return true;
}
答案 1 :(得分:1)
您可以使用简单的for
循环遍历列表,并将每个值与您的特定值(例如1)进行比较。如果列表中的一个值不等于某个值,则只需将布尔值设置为false。
答案 2 :(得分:1)
就这样做
public boolean isFilled(String value, ArrayList<String> list)
{
for(int i = 0; i < list.size(); i++)
{
String toTest = list.get(i);
if(toTest == null || !toTest.equals(value)) {
return false;
}
}
return true;
}
答案 3 :(得分:1)
在Java 8中,您可以使用流的allMatch
方法来实现此目的。
public boolean allOnes(Collection<Integer> values) {
return values.parallelStream().allMatch(i -> i == 1);
}
如果有多个处理器可用,使用parallelStream
可能会产生更好的性能。
答案 4 :(得分:0)
boolean x=true;
ArrayList<Integer> listOfInts = new ArrayList<Integer> (Arrays.asList(5,3,1,2,9,5,0,7));
Integer target = 1;
for (int i = 0; i < listOfInts.size(); i++)
{
if (listOfInts.get(i).equals(target)) // nothing
{
} else {
x = false;
break;// exits loop right after this
}
}
System.out.println(x);
答案 5 :(得分:-1)
令我惊讶的是,到目前为止提出的所有解决方案都是完全错误的,或者包含一个微妙的错误,或者可能更有效。
这是一个无论列表类型如何都能快速运行的解决方案,即使列表包含空元素:
public boolean listIsFilledWith(List<Integer> integers, int i) {
Integer value = i; // transform the int into an Integer only once
for (Integer element : integers) { // iterate using an iterator, to avoid performance problems with linked lists
if (!value.equals(element)) { // value is not null, but element can be. Don't compare objects with == or !=
return false; // return early
}
}
return true;
}
答案 6 :(得分:-2)
使用.contains()
方法告诉您该值是否存在于列表中:http://docs.oracle.com/javase/1.4.2/docs/api/java/util/List.html#contains%28java.lang.Object%29
myList.contains(1);
注意:它使用所包含对象的.equals()
方法(它可能对您未来的开发有用)。
HIH 微米。