[英]Check if lists contain same objects
我有两个填充列表。 第一个列表包含例如:
"Shoppinglist-fruit", "Shoppinglist-drinks", "Shoppinglist-dinner"
第二个列表包含:
"Shoppinglist-drinks"
现在,我要打印第一个列表中的所有项目,除非第二个列表中有相同名称的对象(Shoppinglist-drinks)。 看起来像: "Shoppinglist-fruit", "Shoppinglist-dinner"
因此,如何检查第二个列表内的对象名称是否也在第一个列表的对象中。 最终我想以一个字符串结尾,该字符串包含第一个列表中而不是第二个列表中购物清单的所有名称。 我从下面的一些代码开始,但是我无法完成它。
我有两个列表,一个叫做listShoppinglists,这是一个充满不同购物列表的列表。 第二个列表中包含某人的购物清单。 所以我想检查购物清单的名称是否相等。 如果这样做的话。
public String getAllShoppingLists(List listShoppinglists, Customer customer, List shoppinglists) {
String namesOfTheShoppingListNames = ""
for (Shoppinglist shoppinglist : listShoppinglists) {
for (int i = 0; i < customer.shoppinglists.size(); i++) {
if (customer.shoppinglists.get(i).getName().equals(shoppinglist.getName())) {
// Some action here
}
}
}
return namesOfTheShoppingListNames;
}
您可以尝试以下方法:
List<ShoopingList> firstShoppingListNames = new ArrayList<>();
firstShoppingListNames.add(new ShoppingList("fruit"));
firstShoppingListNames.add(new ShoppingList("dinner"));
firstShoppingListNames.add(new ShoppingList("juice"));
List<ShoppingList> secondShoppingListNames = new ArrayList<>();
secondShoppingListNames.add(new ShoppingList("fruit"));
List<ShoppingList> distinct = firstShoppingListNames.stream().
filter( list -> secondShoppingListNames.stream().
noneMatch(o -> o.getName().equals(list.getName()))).
collect(Collectors.toList());
distinct.forEach(o -> System.out.print(o.getName()));
在这种情况下,您将使用流来实现所需的功能。 您过滤第一个列表以获得那些元素,这些元素在其他列表中不存在。
另外,如果您只想获取这些列表的名称,则可以使用map:
List<String> distinct = firstShoppingListNames.stream().
filter( list -> secondShoppingListNames.stream().
noneMatch(o -> o.getName().equals(list.getName()))).
map(ShoppingList::getName).collect(Collectors.toList());
使用Collections.removeAll()方法执行此操作。 引用JavaDoc:-
删除指定集合中也包含的所有此集合元素(可选操作)。 此调用返回后,此集合将不包含与指定集合相同的元素
.List<String> list1=new ArrayList<String>();
list1.add("Shoppinglist-fruit");list1.add("Shoppinglist-drinks");list1.add("Shoppinglist-dinner");
List<String> list2=new ArrayList<String>();
list2.add("Shoppinglist-drinks");
list1.removeAll(list2);
System.out.println(list1);
//Output:- [Shoppinglist-fruit, Shoppinglist-dinner]
如果列表包含一个自定义对象,则在该自定义对象中覆盖等于和哈希码方法 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.