簡體   English   中英

檢查列表是否包含相同的對象

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM