Ned*_*Ned 94 java element list find
我有两个列表,其中包含不同的对象.
List<Object1> list1;
List<Object2> list2;
Run Code Online (Sandbox Code Playgroud)
我想根据特定属性(Object1和Object2具有(等等),一个相互属性(类型为Long),名为attributeSame)来检查list1中是否存在list1中的元素.
现在,我这样做:
boolean found = false;
for(Object1 object1 : list1){
for(Object2 object2: list2){
if(object1.getAttributeSame() == object2.getAttributeSame()){
found = true;
//also do something
}
}
if(!found){
//do something
}
found = false;
}
Run Code Online (Sandbox Code Playgroud)
但我认为有更好更快的方法来做到这一点:)有人可以提出吗?
谢谢!
Lou*_*man 207
这可以使用基本JDK完成,而无需修改一行中的输入列表
!Collections.disjoint(list1, list2);
Run Code Online (Sandbox Code Playgroud)
Woo*_*Moo 38
您可以使用Apache Commons CollectionUtils:
if(CollectionUtils.containsAny(list1,list2)) {
// do whatever you want
} else {
// do other thing
}
Run Code Online (Sandbox Code Playgroud)
这假设您已正确重载自定义对象的equals功能.
有一种Collection命名方法,retainAll但有一些副作用供您参考
仅保留此列表中包含在指定集合中的元素(可选操作).换句话说,从该列表中删除未包含在指定集合中的所有元素.
如果此列表因调用而更改,则为true
就像是
boolean b = list1.retainAll(list2);
Run Code Online (Sandbox Code Playgroud)
小智 6
要缩短Narendra的逻辑,可以使用以下命令:
boolean var = lis1.stream().anyMatch(element -> list2.contains(element));
Run Code Online (Sandbox Code Playgroud)
Loius的回答是正确的,我只想添加一个例子:
listOne.add("A");
listOne.add("B");
listOne.add("C");
listTwo.add("D");
listTwo.add("E");
listTwo.add("F");
boolean noElementsInCommon = Collections.disjoint(listOne, listTwo); // true
Run Code Online (Sandbox Code Playgroud)