Java-将单个字符串值与ArrayList中的所有字符串值进行比较
我有一个Java-将单个字符串值与ArrayList中的所有字符串值进行比较,java,string,list,arraylist,Java,String,List,Arraylist,我有一个ArrayList,其中包含一组(相同)字符串值,我需要将这些值与单个字符串值进行比较,并返回true或false。有什么办法吗 那是爪哇语吗 例如,假设我有一个ArrayList,其中有5个值=foo,foo,foo,foo,foo(我的要求是ArrayList中的所有值都相同),我有一个字符串str=“foo”。我需要验证arraylist中的所有值是否与字符串值相同,即arraylist中的所有值都应该是“foo” 我试着用谷歌搜索这些信息,我所能看到的只是建议以不同的方式使用co
ArrayList
,其中包含一组(相同)字符串值,我需要将这些值与单个字符串值进行比较,并返回true或false。有什么办法吗
那是爪哇语吗
例如,假设我有一个ArrayList
,其中有5个值=foo,foo,foo,foo,foo(我的要求是ArrayList中的所有值都相同),我有一个字符串str=“foo”
。我需要验证arraylist中的所有值是否与字符串值相同,即arraylist中的所有值都应该是“foo”
我试着用谷歌搜索这些信息,我所能看到的只是建议以不同的方式使用contains()
方法,即使arraylist中的任何值包含指定的值,该方法也会返回true
我甚至想出了一个解决办法——创建另一个具有预期值的arraylist,并使用equals()
方法比较这两个列表
工作。我只是想知道是否有任何简单的方法来实现这一点。您可以使用此方法来实现这一点
private boolean allAreSame(ArrayList<String> stringList, String compareTo){
for(String s:stringList){
if(!s.equals(compareTo))
return false;
}
return true;
}
private boolean allAreSame(ArrayList stringList,String compareTo){
用于(字符串s:stringList){
如果(!s.equals(compareTo))
返回false;
}
返回true;
}
如果要知道数组是否包含字符串,请使用
Java 8很简单:
String str = "foo";
List<String> strings = Arrays.asList("foo", "foo", "foo", "foo", "foo");
boolean allMatch = strings.stream().allMatch(s -> s.equals(str));
1) 可以将arraylist传递到集合中
2) 现在可以得到集合的大小,如果它等于1,则表示所有元素都相同
3) 现在,您可以使用contains on集合检查您的值是否存在于其中
public static void main(String[] args){
String toBeCompared="foo";
List<String> list=new ArrayList<String>();
list.add("foo");
list.add("foo");
list.add("foo");
list.add("foo");
list.add("foo");
Set<String> set=new HashSet<String>(list);
if(1==set.size()){
System.out.println(set.contains(toBeCompared));
}
else{
System.out.println("List has different values");
}
}
publicstaticvoidmain(字符串[]args){
字符串tobecompare=“foo”;
列表=新的ArrayList();
列表。添加(“foo”);
列表。添加(“foo”);
列表。添加(“foo”);
列表。添加(“foo”);
列表。添加(“foo”);
Set Set=新哈希集(列表);
如果(1==set.size()){
System.out.println(set.contains(tobecompare));
}
否则{
System.out.println(“列表有不同的值”);
}
}
我会这样做:
ArrayList<String> foos = new ArrayList<>();
String str = "foo";
for (String string : foos) {
if(string.equals(str)){
System.out.println("True");
}
}
ArrayList foos=new ArrayList();
字符串str=“foo”;
for(字符串:foos){
if(string.equals(str)){
System.out.println(“真”);
}
}
只需迭代列表并将每个项目与您的字符串进行比较
。如果所有值都相等,true
,如果任何值不相等,false
。我可以这样做,但我正在寻找一个单行解决方案,就像@steffen建议的那样。应该使用!等于而不是=它将返回相同的内容,但我将修复它fyi:==
测试引用相等性(它们是否是相同的对象).equals()
测试值是否相等(它们在逻辑上是否“相等”)。因此,如果你想测试两个字符串是否具有相同的值,你应该使用.equals()
,因为有很多情况下=
不会返回true
进行比较。谢谢你以后的参考,但我已经解决了:)OP说这不是他们想要的,因为它只看到一个字符串是否相等,问题是他想检查列表中的每个条目是否都是相同的值。OP说,必须将列表中的所有字符串进行比较,使其与给定的字符串相等。为清楚起见,可能是final string str=“foo”代码>。对于千千万万的foo来说,一个parallelStream()
可能是个好主意。java8正在兴起+1@steffen杰出的这正是我要找的,而且很有效。非常感谢。另外,我对java还是新手。因此,如果您能够解释这一行的具体功能,将更有帮助boolean allMatch=strings.stream().allMatch(s->s.equals(str))代码>@Just好奇关于它的文档太多了,在这里解释起来太复杂了。搜索Java8Lambda和Streams。简而言之:Java8提供了类似于Unix管道的流。使用streams可以迭代集合并执行一个或多个操作allMatch()
是一种短路终端操作,意味着迭代在遇到第一个不匹配项后立即停止,并返回false
。如果所有项目都匹配,则返回true
。非常感谢!这有助于:)或在步骤3中使用Set.contains()newhashset(list.size()==1&&str.equals(list.get(0))
-不从集合中获取它以使其成为单行。@KDM-HashSet
或HashSet
会更好,我相信。@realpoint在传递集合时不在java 8中。注意到这点。@realpoint谢谢你的评论,编辑了我的答案。
boolean allMatch = true;
for (String string : strings) {
if (!string.equals(str)) {
allMatch = false;
break;
}
}
public static void main(String[] args){
String toBeCompared="foo";
List<String> list=new ArrayList<String>();
list.add("foo");
list.add("foo");
list.add("foo");
list.add("foo");
list.add("foo");
Set<String> set=new HashSet<String>(list);
if(1==set.size()){
System.out.println(set.contains(toBeCompared));
}
else{
System.out.println("List has different values");
}
}
ArrayList<String> foos = new ArrayList<>();
String str = "foo";
for (String string : foos) {
if(string.equals(str)){
System.out.println("True");
}
}