我有2個包含多個對象的列表。我想過濾在特定屬性中包含相同String值的對象。 我們假設listA
包含屬性爲id
的對象。雖然它包含不同的對象,但與listB
相同。儘管這兩個列表中的一些對象具有相同的ID。我想過濾這些對象並將它們放入新列表中。這是我走到這一步:Java過濾器列表,以便它只包含與另一個列表具有相同屬性的對象
List<Customer> Clist = Customer.getAllCustomers();
List<License> Llist = License.getAllLicenses();
Predicate<Customer> customerNotNullPredicate = u -> (u.id != null);
Predicate<License> licenseNotNullPredicate = u -> (u.id != null);
List<Customer> Clistfiltered1 = Clist.parallelStream().filter(customerNotNullPredicate).collect(Collectors.toList());
List<License> Llistfiltered1 = Llist.parallelStream().filter(licenseNotNullPredicate).collect(Collectors.toList());
Clistfiltered1.retainAll(Llistfiltered1);
try {
Clistfiltered1.get(0);
} catch (Exception e){
System.out.println(e);
}
如果當然,retainAll()
不返回任何東西,因爲這兩個名單隻包含了不同類型的對象。我如何嘗試在對象的特定屬性上使用retainAll()
?
非常感謝您提前。
你不能。當然,你必須首先找到兩個列表都有共同點的id。然後,在第二步中,您可以過濾兩個列表。 – AKSW
目前尚不清楚你想要什麼。你只是篩選非''null'的ID,這與ID是無關的。那麼,期望的結果是什麼,「客戶」實例列表或「許可證」實例列表?那麼,'嘗試{Clistfiltered1.get(0); } catch(Exception e){...}'...是你測試list.isEmpty()'的首選方法嗎?真的嗎? – Holger
@Holger由於這個例子直接來自我正在處理的應用程序,可能是我遺漏了一些信息。非空搜索是因爲我有很多數據庫條目在這個屬性爲null(我正在使用預定義的數據庫),否則會引發異常。預期的結果是隻包含ID在兩個列表中匹配的對象的列表。 try,catch塊只是爲了快速測試,看看我得到了什麼錯誤。我仍然在編碼的學習過程中,並且從互聯網資源中學習所有東西。對不起,我不熟悉最佳做法。 –