我有两个已填写的列表。 第一个列表包含例如:
"Shoppinglist-fruit", "Shoppinglist-drinks", "Shoppinglist-dinner"
第二个列表包含:
"Shoppinglist-drinks"
现在我想打印第一个列表中的所有项目,除非第二个列表中存在具有相同名称的相同对象(购物 list 饮料)。
看起来像:
“购物 list -水果”,“购物 list -晚餐”
那么我如何检查第二个列表中的对象名称是否也在第一个列表的对象之一中。 最终我想得到一个字符串,其中包含第一个列表中而不是第二个列表中的所有购物 list 的名称。 我从下面的一些代码开始,但无法完成它。
我有两个列表,一个称为 listShoppinglists,这是一个充满不同购物 list 的列表。 第二个 list 是某人的购物 list 。 所以我想检查购物 list 的名称是否相同。 如果这样做的话。
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());
关于java - 检查列表是否包含相同的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41486929/